2009-04-24 4 views
1

Ich möchte server2 benutzen wenn server1 ausfällt, also habe ich zwei Webreferenzen aber das führt zu einer "Mehrdeutigen Referenz" Fehler, da auf beiden Servern derselbe Dienst ausgeführt wird.Ich benutze einen Webservice auf server1 Wie kann ich zu server2 wechseln wenn server1 fehlschlägt (mit C#)

Dies ist der C# -Code:

App.org.weccrc.www verwendet wird; // Hauptserver mit App.org.weccrc.www2; // Backup Server

Gibt es eine Möglichkeit zu überprüfen, ob der Dienst auf server1 vor der „using“ Anweisung "zur Verfügung steht?

kann dies eine bedingte Anweisung sein?

Oder gibt es einen anderen Ansatz zu löst dieses Problem.

Vielen Dank im Voraus

Raúl

Antwort

1

auf Ihrer Web-Referenz, stellen Sie das URL-Verhalten zu D dynamisch. Der generierte Code für die Webreferenz enthält jetzt eine Konfigurationseinstellung, die den Speicherort steuert. Wenn Sie feststellen, dass der primäre Dienst fehlgeschlagen ist, können Sie die Url-Eigenschaft auf den Ersatzspeicherort festlegen.

Wie Sie feststellen, dass der primäre Dienst fehlgeschlagen ist, hängt natürlich von dem Dienst ab, den Sie verbrauchen.

3

Ich würde so etwas wie diese

public R CallWebservice<T,R>(T service, IEnumerable<string> urls, Func<T,R> serviceCall) 
    where T : SoapHttpClientProtocol, IDisposable 
{ 
    foreach (var url in urls) 
    { 
     try { 
      service.Url = url; 
      return serviceCall(service); 
     } catch (Exception ex) { 
      // Log Error 
      continue; 
     } finally { 
      service.Dispose(); 
     } 
    } 

    // throw exception here which means that all url's failed 
} 

tun und man kann es nennen angegeben so etwas wie diese

Employee[] employees = CallWebService(
    new DownloadService(), 
    new string[] { "http://site1/service.asmx","http://site2/service.asmx" }, 
    service => service.DownloadEmployees() 
); 

Dies würde eine Schleife durch jede URL zu tun und die Webservice nennen. Wenn dies fehlschlägt, versucht es einfach, die nächste URL auszuführen, bis es erfolgreich ausgeführt wird.

+0

Schön, schlägt das Heck aus dem Beispiel, das ich gerade gelöscht habe :) – RSolberg

+0

heh, das passiert mir auch oft. Ich habe zufällig gerade Arbeitscode direkt vor mir zu verwenden;) –

+0

Dank Darren und Joseph, beide Antworten waren nützlich für mich Danke –

Verwandte Themen