1
我正在創建一個服務層,它基於環境消耗一個端點。它正在使用ASP.NET Web API 2和C#開發的服務層。端點是SOAP,而一個面向測試,另一個面向生產環境。一個鏡像另一個,爲什麼兩個都暴露相同的WSDL。由於終點鏡像,編譯時恰好是衝突。由於這兩個代理類都具有相同的簽名。因此,我的主要問題是如何讓我的WEB API服務能夠與兩者兼容?如何使用相同的wsdl使用多個SOAP Web服務?
我正在創建一個服務層,它基於環境消耗一個端點。它正在使用ASP.NET Web API 2和C#開發的服務層。端點是SOAP,而一個面向測試,另一個面向生產環境。一個鏡像另一個,爲什麼兩個都暴露相同的WSDL。由於終點鏡像,編譯時恰好是衝突。由於這兩個代理類都具有相同的簽名。因此,我的主要問題是如何讓我的WEB API服務能夠與兩者兼容?如何使用相同的wsdl使用多個SOAP Web服務?
閱讀了關於此主題的大多數答案之後。我已經看到他們之間沒有共同之處。因此,我將分享我想出併爲我工作的內容。
記住兩個端點是相同的。我剛剛爲我的項目添加了一個服務參考。所以,我將只有一個代理類來解決編譯衝突。不過,我仍然需要找到一種方法來改變終點。爲此,我在項目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
}
}
也許它不是最好的實現,但,它的工作對我來說。所以我願意接受任何問題和/或建議。
我希望這項工作給需要它的人。
有助於提及您正在使用的平臺。我假設.Net,但標記它會是一個改進。 – mccainz 2015-02-24 19:20:54
對不起。正如你所說我的平臺是C#語言的.NET。 – yopez83 2015-02-24 19:28:53