2009-08-07 2 views
0

서비스 참조 추가 기능을 사용하여 VSTS2008 (C# 콘솔 응용 프로그램, .Net 3.5 사용)에서 동일한 LAN의 다른 컴퓨터에있는 IIS 7.0에서 호스트되는 WCF 서비스에 대한 참조를 추가합니다. . 나는 자동으로 생성 된 클라이언트 측 app.config가 매우 이상하다는 것을 알았다. 여기에 (내가 WCF 호스팅 기계 labtest1에서 WSDL을 가져 IE에서 http://labtest1/WcfDemo/service.svc을 사용할 수 있습니다)이상한 WCF 클라이언트 쪽 app.config 생성

내 혼란이 엔드 포인트 주소는 "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"입니다 만, 실제로는 "http://labtest1/WcfDemo/service.svc"를해야한다, 컨텐츠입니다. 그러나 IE에서 "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"주소를 사용하여 WSDL을 가져올 수 없습니다. 시스템 labtest1의 내부 IP 주소는 10.10.200.10입니다. 어떤 아이디어가 잘못 되었나요?

BTW : 클라이언트 기능이 작동합니다. 즉, WCF 끝점 메소드 호출로 예상 된 결과가 반환 될 수 있습니다. "잘못된"엔드 포인트 주소가 올바른 결과를 리턴하는 방법은 무엇입니까? EDIT 1

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IOrderManagement" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" 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://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IOrderManagement" 
       contract="ServiceReference1.IOrderManagement" name="BasicHttpBinding_IOrderManagement" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

:

이것은 내가 IIS 7.0 측에서 사용하고있는 구성 파일 (Web.config의)입니다. service.svc를 machine labtest1의 기본 웹 사이트 (포트 80)의 WcfDemo 하위 디렉토리에 넣습니다. 정확한 끝점 주소는 "http://labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo"이 아닌 "http://labtest1/WcfDemo/service.svc"이어야한다고 생각하십니까?

  • 실제로

이에 서비스를 호출

  • 에서 당신이 사용하는 하나를 WSDL을 검색하는 데 사용하는 하나 :

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <system.serviceModel> 
        <services> 
         <service behaviorConfiguration="Foo.ServiceBehavior" 
         name="Foo.OrderManagement"> 
         <endpoint address="" binding="basicHttpBinding" contract="Foo.IOrderManagement" /> 
         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
         </service> 
        </services> 
        <behaviors> 
         <serviceBehaviors> 
         <behavior name="Foo.ServiceBehavior"> 
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
          <serviceMetadata httpGetEnabled="true"/> 
          <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
          <serviceDebug includeExceptionDetailInFaults="false"/> 
         </behavior> 
         </serviceBehaviors> 
        </behaviors> 
        </system.serviceModel> 
    </configuration> 
    
  • +1

    IIS에서 호스팅되기 때문에 서비스 주소는 (가상 디렉터리의 URL) + (SVC 파일의 이름)이어야합니다. 따라서 귀하의 경우 : http : //labtest1/WcfDemo/service.svc - Add Service Reference가 서비스 추가 주소를 만든 이유와 더 이상한 이유가 무엇인지 이해하지 못합니다. –

    +0

    Marc 님, 전에 이와 비슷한 문제를 경험해 봤습니까? 내 혼란은 종점 주소가 predicable이며, 이상한해서는 안됩니다. :-) – George2

    답변

    1

    당신은 떨어져 두 개의 URL의를 계속해야 다를 수 있습니다! http://labtest1/WcfDemo/service.svc에서 WSDL을 검색 할 수 있다고해서 서비스가 호출 될 수있는 것은 아닙니다.

    는하지만 동의 - config 파일은 "서비스 참조 추가"기능이 큰 CONFIGS를 만드는 알 수없는, 다시 다음 .... 오히려 이상한 보면 ....

    나의 제안은 : 연결을 시도 WcfTestClient.exe ("program files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE"디렉토리에서 찾을 수 있음)를 사용하여 서비스에 액세스하고이 결과를 확인하십시오. 귀하의 경우 즉 http://labtest1/WcfDemo/service.svc -

    alt text http://i25.tinypic.com/66yp7a.jpg

    서비스를 검색하려면, 당신은 당신의 WSDL을 찾을 수있는 주소를 입력해야합니다. 이 테스트 클라이언트는 어떤 엔드 포인트를 찾습니까?

    마크

    +0

    마크, 사실 내 혼란은 anthoer 컴퓨터에서, 내가 서비스 참조를 추가 할 때, 그것은 http : //labtest1/WcfDemo/service.svc입니다.IE http : //labtest1/WcfDemo/service.svc에서 작동하지만 http : //labtest1/WcfDemo/service.svc/10.10.200.10/wcfDemo는 IE에서 작동하지 않으며 내 클라이언트 응용 프로그램에서 WCF 서비스를 호출합니다. 나는 WCFTestClient.exe를 사용하여 테스트했는데, WCFTestClient UI의 구성 파일 내용은 주소 "http : //labtest1/WcfDemo/service.svc"를 포함하고 있습니다. – George2

    +0

    나는 또한 새로운 VSS 2008 솔루션에 빈 콘솔 애플리케이션 프로젝트를 추가하고 서비스 참조를 추가하려고 시도했지만 결과는 이상한 긴 주소가 아닌 labtest1/WcfDemo/service.svc입니다. – George2

    +1

    George2 : IE는 메타 데이터 (WSDL)를 사용할 수있는 주소에있는 서비스 페이지 만 "보고"표시 할 수 있습니다. IE는 실제로 실제 서비스 주소로 서비스를 호출 할 수 없습니다 ** - 귀하의 전화는 SOAP 메시지를 기대하고 IE는 SOAP 메시지를 전송할 수 없습니다. WcfTestClient를 사용하십시오. –

    1

    나는 WCF 서비스는 도메인 내부의 서버에서 호스팅되는 경우 이런 일이 보았다. 이 유틸리티는 인터넷 대신 인트라넷 URL을 만드는 것처럼 보입니다.

    +0

    "도메인 내부 서버"- 도메인 내부의 의미는 무엇입니까? 동일한 Windows Active Directory 도메인 또는 동일한 LAN에 있습니까? 더 많은 정보를 제공해 주실 수 있습니까? – George2

    +0

    모든 서비스 참조 frmo VSTS IDE 및 서비스 참조 하위 폴더를 동일한 솔루션에서 삭제하려고 시도한 다음 서비스 참조 추가를 사용하여 참조를 추가하면 생성 된 cient 측 app.config가 정상적으로 보입니다. 어떤 아이디어? 나는 매우 혼란 스럽다. – George2

    +1

    "도메인 내의 서버"란 실제로 Windows Active Directory 도메인을 의미합니다. 너를 더 이상 도울 수 없어. 나는 간단히 유틸리티 파일을 포기하고 매우 쓸모없는 응용 프로그램을 만들었습니다. – Dabblernl

    관련 문제