Frage

Ich habe Code, der einen Web-Service verweist, und ich mag die Adresse dieses Web-Service dynamisch sein (lesen Sie aus einer Datenbank, Konfigurationsdatei, etc.), so dass es leicht geändert wird. Eine wichtige Anwendung dieser wird auf mehrere Umgebungen zu implementieren, wo Maschinennamen und IP-Adressen unterschiedlich sind. Die Web-Service-Signatur wird das gleiche für alle Einsätze sein, nur an anderer Stelle befindet.

Vielleicht habe ich nur durch das Visual Studio verdorben Assistenten „Webverweis hinzufügen.“ - scheint so etwas relativ einfach sein sollte, obwohl

War es hilfreich?

Lösung

Wenn Sie eine Web-Referenz generieren und im Solution Explorer auf der Web-Referenz klicken. Im Eigenschaftenfenster sollten Sie etwas wie diese:

Web-Referenz Eigenschaften

den Wert auf dynamische Ändern einen Eintrag in Ihrem app.config setzen.

Hier ist der CodePlex Artikel , die mehr Informationen.

Andere Tipps

Wenn Sie wirklich diese dynamisch einstellen, sollten Sie die .url Bereich der Instanz der Proxy-Klasse setzen Sie anrufen.

Wenn Sie den Wert in der .config-Datei aus Ihrem Programm:

  1. Ist ein Chaos;

  2. Könnte nicht bis zum nächsten Start der Anwendung gelesen werden.

Wenn es nur etwas, das einmal pro Installation getan werden muss, würde ich mit den anderen Plakaten einverstanden ist und die .config-Datei und die dynamische Einstellung.

Ich weiß, das ist eine alte Frage, aber unsere Lösung ist viel einfacher als das, was ich hier sehe. Wir verwenden es für WCF Anrufe mit VS2010 und höher. Der String url kann von App-Einstellungen oder einer anderen Quelle. In meinem Fall ist es ein Dropdown-Liste, wo der Benutzer den Server nimmt. Theservice wurde durch VS konfigurierte Servicereferenz hinzuzufügen.

private void CallTheService( string url )
{
   TheService.TheServiceClient client = new TheService.TheServiceClient();
   client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
   var results = client.AMethodFromTheService();
}

Ich habe mit diesem Thema für ein paar Tage zu kämpfen und schließlich die Glühbirne angeklickt. Der Schlüssel zu der Möglichkeit, die URL eines Webservice zur Laufzeit zu ändern, wird das Überschreiben den Konstruktor, die ich mit einer partiellen Klassendeklaration tat. Die obige Einstellung der URL Verhalten Dynamische muss auch getan werden.

Dies schafft im Grunde einen Web-Service-Wrapper, wo, wenn Sie Web-Service zu einem bestimmten Zeitpunkt neu zu laden haben, über Zusatzdienstverweis, Sie Ihre Arbeit nicht verlieren. Die Microsoft-Hilfe für Teilklassen besagt speziell, dass ein Teil des Grundes für dieses Konstrukt ist Web-Service-Wrapper zu erstellen. http://msdn.microsoft.com/en- us / library / wa80x488 (v = VS.100) aspx

// Web Service Wrapper to override constructor to use custom ConfigSection 
// app.config values for URL/User/Pass
namespace myprogram.webservice
{
    public partial class MyWebService
    {
        public MyWebService(string szURL)
        {
            this.Url = szURL;
            if ((this.IsLocalFileSystemWebService(this.Url) == true))
            {
                this.UseDefaultCredentials = true;
                this.useDefaultCredentialsSetExplicitly = false;
            }
            else
            {
                this.useDefaultCredentialsSetExplicitly = true;
            }
        }
    }
}

Ändern URL Verhalten " Dynamische ".

Solange die Web-Service-Methoden und die zugrunde liegende ausgesetzte Klassen nicht ändern, es ist ziemlich trivial. Mit Visual Studio 2005 (und höher), eine Web-Referenz Hinzufügen erstellt eine app.config (oder web.config, für Web-Anwendungen) Abschnitt, der diese URL hat. Alles was Sie tun müssen, ist die app.config-Datei bearbeiten, um die gewünschte URL zu reflektieren.

In unserem Projekt unser einfacher Ansatz war nur noch die app.config Einträge pro Umwelt Art kommentiert hat (Entwicklung, Test, Produktion). So Kommentar- wir nur den Eintrag für die gewünschte Umgebung Typ. Keine spezielle Codierung benötigt es.

Noch eine Anmerkung zu Unterschied beetween statisch und dynamisch.

  • Static : Sie müssen URL-Eigenschaft jedes Mal, wenn Sie Web-Service aufrufen. Dies, weil Basis-URL, wenn Web-Service in dem Proxy-Klasse Konstruktor ist.
  • Dynamische : ein spezieller Konfigurationsschlüssel wird in den web.config Datei für Sie erstellt werden. Standardmäßig wird Proxy-Klasse URL von diesem Schlüssel lesen.

Wenn Sie die URL aus einer Datenbank holen Sie es an die Web-Service-Proxy-Klasse Eigenschaft URL manuell zuweisen können. Dies sollte vor dem Aufruf der Web-Methode durchgeführt werden.

Wenn Sie möchten, dass die Config-Datei verwenden, können Sie die Proxy-Klassen URL Verhalten dynamisch festgelegt.

Auf jeden Fall die URL-Eigenschaft verwendet, ist der Weg zu gehen. Ob es in der app.config zu setzen, die Datenbank oder ein dritte Standort sortieren hängt von Ihren Konfigurationsanforderungen. Manchmal wollen Sie nicht die App neu zu starten, wenn Sie den Web-Service-Standort zu wechseln. Sie können nicht einen Load-Balancer die Backend-Skalierung haben. Vielleicht haben Sie Hot-Patching einen Web-Service-Fehler. Ihre Umsetzung könnte Sicherheitskonfigurationsprobleme haben als auch. Ob es sich um die Produktion db Benutzernamen und Passwörter oder sogar die ws Sicher.auth Info. Die richtige Trennung der Aufgaben können Sie in einige beteiligten Konfigurationseinstellungen erhalten.

Wenn Sie eine Wrapper-Klasse um die Proxy-generierten Klassen hinzufügen, können Sie die URL-Eigenschaft in einem gewissen einheitlichen Art und Weise festgelegt, jedesmal wenn Sie die Wrapper-Klasse erstellen Sie eine Web-Methode aufrufen.

open solition Explorer

Rechtsklick auf den Webdienst Änderung URL-Verhalten auf dynamische

Klicken Sie auf die 'Alle Dateien anzeigen' Symbol in Lösung Explorer

in der Web-Referenz bearbeitet die Reference.cs Datei

Änderung constructer

public Service1() {
        this.Url = "URL"; // etc. string  variable this.Url = ConfigClass.myURL
      }

Für mich ist ein Verweis auf ein WebService ist ein

  

SERVICE BEZUG

.

Wie auch immer, es ist sehr einfach. Als jemand sagte, müssen Sie einfach die URL in der Datei web.config ändern.

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="YourServiceSoap" />
      </basicHttpBinding>
    </bindings>
    <client>
        **** CHANGE THE LINE BELOW TO CHANGE THE URL **** 
        <endpoint address="http://10.10.10.100:8080/services/YourService.asmx"
          binding="basicHttpBinding" bindingConfiguration="YourServiceSoap"
          contract="YourServiceRef.YourServiceSoap" name="YourServiceSoap" />
    </client>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top