2012-07-20 102 views
3

我有一個WCF服務,我正在連接客戶端應用程序。我正在配置文件中使用以下內容。以編程方式添加端點

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="MyNameSpace.TestService" closeTimeout="00:01:00" openTimeout="00:01:00" 
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:9100/TestService" binding="basicHttpBinding" 
      bindingConfiguration="MyNameSpace.TestService" contract="TestService.IService" name="MyNameSpace.TestService" /> 
    </client> 
</system.serviceModel> 

在代碼中,我對這個服務調用API如下,

TestServiceClient client = new TestServiceClient() 
client.BlahBlah() 

現在我想定義端點porgramatically。如何做到這一點?我從配置文件中註釋掉了一部分,因爲我想我將不得不在TestServiceClient實例上添加一些代碼來動態添加端點,但隨後會在TestServiceClient實例化的位置拋出以下異常。

找不到引用合同 「TestService.IService」在ServiceModel客戶端配置 欄目默認終結點元素。這可能是因爲沒有爲您的應用程序找到配置文件 ,或者因爲在客戶端元素中找不到與此 合同匹配的端點元素。

我該如何做到這一點?此外,以編程方式添加端點的代碼示例上的任何點都將被讚賞。

回答

8

以編程方式創建端點和綁定,你可以做到這一點的服務:

ServiceHost _host = new ServiceHost(typeof(TestService), null); 

var _basicHttpBinding = new System.ServiceModel.basicHttpBinding(); 
      //Modify your bindings settings if you wish, for example timeout values 
      _basicHttpBinding.OpenTimeout = new TimeSpan(4, 0, 0); 
      _basicHttpBinding.CloseTimeout = new TimeSpan(4, 0, 0); 
      _host.AddServiceEndpoint(_basicHttpBinding, "http://192.168.1.51/TestService.svc"); 
      _host.Open(); 

你也可以定義你的服務配置多個端點,並選擇動態連接在運行時哪一個。

在客戶端程序,然後你可以這樣做:

basicHttpBinding _binding = new basicHttpBinding(); 
EndpointAddress _endpoint = new EndpointAddress(new Uri("http://192.168.1.51/TestService.svc")); 

TestServiceClient _client = new TestServiceClient(_binding, _endpoint); 
_client.BlahBlah(); 
0

你可以試試:

TestServiceClient client = new TestServiceClient("MyNameSpace.TestService") 
client.BlahBlah() 

如果不重新檢查的命名空間中的文件TestService的是正確的?

1

可你只需要使用:

TestServiceClient client = new TestServiceClient(); 
client.Endpoint.Address = new EndPointAddress("http://someurl"); 
client.BlahBlah(); 

請注意,您綁定配置將不再適用,因爲你不使用你的配置文件端點配置。你也必須重寫這個。