Laden...

Webservice URL dynamisch setzen.

Erstellt von wwwowtschik vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.647 Views
W
wwwowtschik Themenstarter:in
54 Beiträge seit 2007
vor 17 Jahren
Webservice URL dynamisch setzen.

c#

Hallo zusammen,

ich habe ein Programm geschrieben, welches 1. Webservice nutzt und 2. auf verschiedenen Clients installiert wird, auch der Webservice den mein Programm nutzen soll.
Das Problem ist jetzt, der Benutzer soll in der Lage sein die URL für den Webservice in der Proxy Klasse dynamisch setzen zu können.

Irgendwie kann ich es mit this.Url = newUrl.toString() zur Laufzeit nicht ändern (Fehler: Error : Ungültiger URI: Die Zeichenfolge ist zu lang).

Meine Frage, geht es überhaupt das der Benutzer, wenn das Programm bei ihm bereits installiert ist, url ändern kann?

Falls ja währe für den Tipp wie ich es realisieren kann dankbar.

R
5 Beiträge seit 2007
vor 17 Jahren

also es geht definitiv...
kannst du mal den kompletten fehler posten? am besten mit code

W
wwwowtschik Themenstarter:in
54 Beiträge seit 2007
vor 17 Jahren

Original von romanrobel
also es geht definitiv...
kannst du mal den kompletten fehler posten? am besten mit code

Hi, das war die ganze Fehlermeldung die ich bekommen habe (sieh oben). Wenn ich versucht habe mein String an this.url = myString zuzuweisen.
Hier ist nochmal der Konstruktor von meiner Proxy Klasse:

public MyDocument()
        {
 string urlSetting = System.Configuration.ConfigurationManager.AppSettings["MyDocument.ServiceEndpointURL"];
            if (((urlSetting != null)  && (urlSetting != "")))
            {
                this.Url = urlSetting;
            }
            else
            {
                try
                {
                    ServerLocation sL = new ServerLocation();
                   //sL.getServerLoc() liest aus einer .txt Datei die url und liefert als String zurück.
                    String url = sL.getServerLoc();

                    this.Url = url;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message.ToString());
                }
            }
        }

Das einzige was ich geändert habe, ich lese die url aus einer .txt Datei und weise an this.url zu. Vorher stand da
this.url="http://localhost/MyServer/MeinService.asmx";

Wenn ich mein ausgelesenen String anzeige, dann sieht er genauso aus wie die url ober, aber ich kann ihn nicht zuweisen.

Kann es doch vielleicht an dem String liegen denn ich mit BinaryReader einlese? Weil die Meldung irgendwie kommisch ist, Zeichenkette währe zu lang.

W
wwwowtschik Themenstarter:in
54 Beiträge seit 2007
vor 17 Jahren

Und hier ist die Funktion mit der ich in die Datei schreibe und lese.:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace AddInSendData
{
    public class ServerLocation
    {
       
        //Speichert server location in die Datei.
        public void setServerLoc(String sl)
        {
             //Pfad der aktueller Anwendung wird ermittelt, um auf die verschlüsselte Datei mit
        //Benutzername und Password zuzugreifen.
         String file = System.Reflection.Assembly.GetAssembly(typeof(ConnectWord)).Location;
         FileInfo fi = new FileInfo(file);
         String path = fi.DirectoryName + @"\SLoc.txt";


            FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
            Byte[] bArr = new Byte[sl.Length];
            bArr = Encoding.UTF8.GetBytes(sl);
            fs.Write(bArr, 0, bArr.Length);

            fs.Close();
        }

        //Liest server location aus der Datei.
        public String getServerLoc()
        {
            //Pfad der aktueller Anwendung wird ermittelt, um auf die verschlüsselte Datei mit
            //Benutzername und Password zuzugreifen.
            String file = System.Reflection.Assembly.GetAssembly(typeof(ConnectWord)).Location;
            FileInfo fi = new FileInfo(file);
            String path = fi.DirectoryName + @"\SLoc.txt";

            String serverLocation;

            try
            {
                FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                Byte[] bArr = new Byte[fi.Length];
                br.Read(bArr, 0, bArr.Length);
                serverLocation = Encoding.UTF8.GetString(bArr);


                br.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("getServiceLoc: " + ex.Message.ToString());
                serverLocation = "";
            }

            return serverLocation;
 
        }
    }

    
}