![](/img/trans.png)
[英]WCF: The contract 'X' in client configuration does not match the name in service contract
[英]Create WCF service client with specified address without specifying configuration name
有沒有辦法在C#中使用指定的端點地址創建WCF服務客戶端的實例而不指定配置名稱?
默認情況下,客戶端具有以下構造函數:
public ServiceClient()
public ServiceClient(string endpointConfigurationName)
public ServiceClient(string endpointConfigurationName, string remoteAddress)
顯然,由於第一個構造函數,有一個默認配置。 我想要的是只指定最終構造函數的第二個參數。 現在,我正在努力閱讀使用ConfigurationManager來解決它的配置元素,但它看起來非常麻煩。 有更干凈的方式嗎?
我不想在.config文件中使用端點配置。 我通常做這樣的事情:
BasicHttpBinding basicbinding = new BasicHttpBinding();
basicbinding.SendTimeout = TIMEOUT;
basicbinding.OpenTimeout = TIMEOUT;
ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx")));
您生成的客戶端也應該有一個如下所示的構造函數:
public ServiceClient(
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress)
: base(binding, remoteAddress) {
}
您可以在沒有端點配置的情況下調用此方法。
如果你想要實際上只是想要調用服務而不必了解有關WCF服務和配置處理的所有信息,那么在C#中你可以做...
String url = "http:\\somehost:someport\\pathToSomeService";
EndpointAddress address = new EndpointAddress(url);
Binding binding = new BasicHttpBinding();
YourClient client = new YourClient(binding, address);
// Call your client methods
client.SomeMethod(parm1, parm2);
以上假設您生成了服務引用,並且不要求配置信息存在於任何位置,不存在於生成的服務引用中,不存在於DLL中,也不存在於可執行文件中。 沒有配置。 沒有。
我在一個真正的獨立服務代理DLL中使用上面的代碼。 它是最獨立的,因為它完全可配置,不依賴於調用可執行文件來提供任何東西。
好吧,您可以使用默認構造函數,但是您必須在所有配置設置中手動編程。 通過指定配置名稱,服務客戶端將自動從.config文件加載配置,您需要知道的是要使用的配置(您可以有多個,例如一個用於HTTP而另一個用於Net.Tcp)。 當然,remoteAddress只是告訴WCF在哪里建立連接。
如果您自己配置客戶端設置時遇到問題,請確保使用WCF服務配置工具。 它適用於服務配置和客戶端配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.