2012-07-20 3 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> 

, 나는
TestServiceClient client = new TestServiceClient() 
client.BlahBlah() 

가 지금은 porgramatically 정의 된 엔드 포인트에 원하는,이 서비스에 대한 API를 호출하고 있습니다. 어떻게 할 수 있습니까? 필자는 TestServiceClient 인스턴스에 몇 가지 코드를 넣어 동적으로 엔드 포인트를 추가해야한다고 생각 했으므로 config 파일의 섹션을 주석 처리했지만 TestServiceClient가 인스턴스화 된 시점에서 예외를 throw합니다.

는 ServiceModel은 서비스 클라이언트 구성 섹션에 계약 'TestService.IService'를 참조하는 기본 끝점 요소를 찾을 수 없습니다. 응용 프로그램에 에 대한 구성 파일이 없거나이 계약과 일치하는 끝점 요소가 클라이언트 요소에서 발견되지 않았기 때문일 수 있습니다.

나는이 작업을 수행 할 수 있습니까? 또한 프로그래밍 방식으로 끝점을 추가하는 코드 예제의 모든 점을 이해할 수 있습니다.

답변

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(); 

참고. 당신도 그것을 무시해야합니다. 프로그램 엔드 포인트와 바인딩을 만들려면