2015-02-24 186 views
1

我正在創建一個服務層,它基於環境消耗一個端點。它正在使用ASP.NET Web API 2和C#開發的服務層。端點是SOAP,而一個面向測試,另一個面向生產環境。一個鏡像另一個,爲什麼兩個都暴露相同的WSDL。由於終點鏡像,編譯時恰好是衝突。由於這兩個代理類都具有相同的簽名。因此,我的主要問題是如何讓我的WEB API服務能夠與兩者兼容?如何使用相同的wsdl使用多個SOAP Web服務?

+0

有助於提及您正在使用的平臺。我假設.Net,但標記它會是一個改進。 – mccainz 2015-02-24 19:20:54

+0

對不起。正如你所說我的平臺是C#語言的.NET。 – yopez83 2015-02-24 19:28:53

回答

1

閱讀了關於此主題的大多數答案之後。我已經看到他們之間沒有共同之處。因此,我將分享我想出併爲我工作的內容。

記住兩個端點是相同的。我剛剛爲我的項目添加了一個服務參考。所以,我將只有一個代理類來解決編譯衝突。不過,我仍然需要找到一種方法來改變終點。爲此,我在項目web.config文件的appSettings部分添加了三個鍵。

<appSettings>   
    <add key="EndPoint" value="TST" /> 
    <add key="TST" value="http://endpoint_test/Service" /> 
    <add key="PRD" value="http://endpoint_prod/Service" /> 
    </appSettings> 

EndPoint鍵值然後是我用來選擇相應的環境。

/// <summary> 
/// Factory to create proxy classes of a service 
/// </summary> 
public static class ServiceFactory 
{ 
    /// <summary> 
    /// Creates an instance of ServiceClient class from the end-point. 
    /// Which stands for the run-time end point hosting the service, such as 
    /// Test or Production, defined in the web.config. 
    /// </summary> 
    /// <returns>Returns a ServiceClient instance.</returns> 
    public static ServiceClient CreateInstance() 
    { 
     ServiceClient client = new ServiceClient(); 

     //getting the end point 
     switch (ConfigurationManager.AppSettings["EndPoint"]) 
     { 
      case "TST": 
       client.Endpoint.Address = new EndpointAddress("https://endpoint_test/Service"); 
       break; 
      case "PRD": 
       client.Endpoint.Address = new EndpointAddress("https://endpoint_prod/Service"); 
       break; 
     } 

     return client; 
    } 
} 

然後從控制器調用代理類創建

public class PaymentController : ApiController 
{ 
    public IHttpActionResult Action_X() 
    { 
     //Getting the proxy class 
     ServiceClient client = ServiceFactory.CreateInstance(); 

     //keep implementing your logic 
    } 
} 

也許它不是最好的實現,但,它的工作對我來說。所以我願意接受任何問題和/或建議。

我希望這項工作給需要它的人。