2016-06-26 7 views
0

내 솔루션의 서비스 참조 폴더에서 .asmx URL을 참조하여 외부 웹 서비스를 사용하는 WPF/WCF 응용 프로그램이 있습니다. 서버 측에서는WCF 서비스에서 "수신하는 엔드 포인트가 없습니다 ..."

, I는 다음과 같이 web.config에서 작성한 :

<binding name="ExtractService" 
    closeTimeout="00:01:00" openTimeout="00:01:00" 
    receiveTimeout="00:01:00" sendTimeout="00:10: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="8192" 
      maxArrayLength="2147483647" maxBytesPerRead="4096" 
      maxNameTableCharCount="2147483647" /> 
    <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
</binding> 
<client> 
    <endpoint name="ExtractService" 
     address="https://example.com/DataExtractService.asmx" 
     binding="basicHttpBinding" bindingConfiguration="ExtractService" 
     contract="ExtractService" /> 
</client> 

또한 I 위 web.config와 같은 클라이언트 측에서 app.config 엔트리를 갖는다.

개발 환경에서 실행하면 모든 것이 잘 작동합니다. 내 클라이언트와 웹 서버 (WCF)가 같은 시스템에 있기 때문일 수 있습니다.

하지만 테스트 서버에 앱을 배포하면 아래 오류가 발생하기 시작합니다. 이 경우 클라이언트가 내 컴퓨터에 있고 서버 (WCF)가 다른 컴퓨터에 있습니다.

메시지 : HandlingInstanceID : 71a85aef-dbb0-4c28-9035-57f8b7526ee0 형 'System.ServiceModel.EndpointNotFoundException'의 예외가 발생하고
잡혔다.

https://example.com/DataExtractService.asmx에서 메시지를 수락 할 수있는 수신 끝 점이 없습니다. 이것은 종종 잘못된 주소 또는 SOAP 조치로 인해 발생합니다. 자세한 내용은 InnerException을 참조하십시오.

이 문제를 해결하기 위해 클라이언트 측에서 app.exe.config 파일에 동일한 구성을 복사하려고 시도했지만 작동하지 않습니다.

어디에서 클라이언트 구성이 누락 되었습니까? 또한 서버의 bin 폴더에 app.config를 복사했지만 도움이되지 않았습니다.

답변

1
  • 서버 측 서비스가이 서버에있는 엔드 포인트에서 사용할 수있는 정의 섹션 <services>를 포함해야합니다 (적어도 하나의 엔드 포인트를 정의 적어도 하나의<service> 하위 섹션이 있어야한다 이 서비스를 이용할 수있는 곳은 여러 곳 일 수도 있습니다.

  • 클라이언트면에는 사용 가능한 끝점 중 하나에 연결되는 <client> 섹션이 있어야합니다.

또는 짧은에

는 : 따라서이 오류로 이어지는, 따라서 연결하는 모든 엔드 포인트를 노출하지 당신이 당신의 서버 측 설정에 없는 섹션 <services>이있는 경우, 당신은있다.

그래서 서버 측 설정은 다음과 같이 보일한다고 :

또한
<!-- Behavior is optional - maybe you need to define something, maybe not --> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="ExtractServiceBehavior"> 
      ..... 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<!-- Binding is the same as defined on the client --> 
<binding name="ExtractService" .... 
    ...... 
</binding> 
<!-- Define all your services that you offer --> 
<services> 
    <service name="ExtractService" 
      behaviorConfiguration="ExtractServiceBehavior"> 
     <endpoint name="ExtractService" 
      address="https://example.com/DataExtractService.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="ExtractService" 
      contract="IExtractService" /> 
    </service>  
</services>  

: -하지 구현하는 구체적인 클래스 일반적으로, 당신의 계약인터페이스 (IExtractService)해야한다 그 인터페이스.

+0

감사합니다. 일치하는 계약 등으로 서버 태그를 정의했습니다. 그러나 여전히 동일한 오류가 발생합니다. 또한 개발 환경에서 어떻게 작동하는지 궁금합니다. –

+0

기본 엔드 포인트 (WCF 4.0+)가 "서버 측 구성에 섹션이 없으면 연결하려는 엔드 포인트가 노출되지 않았습니다." – Tim

+1

@Tim : 당신 말이 맞을 것 같습니다. ..... 나는 그걸 잊어 버리고 있습니다. 나는 분명히 내 말단을 명시 적으로 정의하는 것보다 더 혼란스럽고 "예기치 않게 놀라움"이라고 생각합니다 ..... –