2016-06-03 7 views
2

Der Code, den ich geschrieben habe, ist die Integration mit dem Webservice von Drittanbietern. Das Problem besteht darin, dass sich Soap-Aktionen für den Dienst in Test- und Produktionsumgebungen unterscheiden. Wenn diese URIs jedoch nicht wichtig sind, gibt der Host 400 zurück - falscher Anforderungsfehler, wenn der Soap-Aktions-URI falsch ist. Host-Service ist in Java geschrieben. Wir verwenden den C# -Webdienst-Proxy.Änderung der Soap-Aktion URI basierend auf der Umgebung

Reference.cs

/// <remarks/> 
     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://1.1.1.1:9080/wss/Ping", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 
     [return: System.Xml.Serialization.XmlElementAttribute("PingResp", Namespace="http://namespace/data")] 
     public PingResp Ping([System.Xml.Serialization.XmlElementAttribute("PingReq", Namespace="http://namespace/data")] PingReq PingReq) { 
      object[] results = this.Invoke("Ping", new object[] { 
         PingReq}); 
      return ((PingResp)(results[0])); 
     } 

Für Produktionsumgebung ist Soapaction:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://2.2.2.2:9080/wss/Ping", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 

Gibt es eine Möglichkeit, diese Dynamik zu machen heißt es möglich URI soap Aktion basierend auf Konfigurationseinstellung ändern?

Ich habe versucht, SoapDocumentMethodAttribute Klasse zu erweitern, aber es ist versiegelt.

Antwort

2

Da es eine Kompilierzeitkonstante benötigt, müssen wir diesen Wert vor dem Kompilieren einstellen, damit es auf der Umgebung basiert und etwas wie ConfigurationManager nicht möglich ist.

Sie könnten eine globale statische Klasse mit const Eigenschaften erstellen, die über #if Präprozessoren aufgefüllt werden und Ihre bedingten Kompilierungssymbole beim Build angeben.

public static class GlobalConstants 
    { 
#if DEBUG 
     public const string Uri = "devUri"; 
#endif 
#if TEST 
     public const string Uri = "testUri"; 
#endif 
#if RELEASE 
     public const string Uri = "releaseUri"; 
#endif 

    } 

Und man konnte es verwenden, wie

[System.Web.Services.Protocols.SoapDocumentMethodAttribute(GlobalConstants.Uri, Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 

Diese Komplexität hinzufügt, wenn an neue Umgebungen migrieren, aber es ist eine Möglichkeit, etwas in der Nähe zu bekommen, was Sie suchen.

Einige Dokumente zum Spezifizieren von Kompilierungssymbolen bei Build: https://msdn.microsoft.com/en-us/library/0feaad6z.aspx

Verwandte Themen