2011-09-02 3 views
20

내가이를 선언해야 할 이유가 궁금 :mex endpoint와 httpGetEnable이 모두 필요한 이유는 무엇입니까?

<serviceMetadata httpGetEnabled="true" /> 

을하고이

<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 

내가 첫 번째 명령 만 사용하는 경우 - 브라우저를 통해이 작동하고 을. 그래서 두 번째 것이 필요한 이유는 무엇입니까?

후자를 사용해야하는 상황에 대해 제게 사례를 제공해 줄 수 있습니까? 하지만httpGetEnabled 필요하지 않습니다 - - 그

  • 이 장소가 선택의

  • +2

    좋은 질문입니다.+1 – Lijo

    답변

    18

    당신은 (즉, serviceMetadata 행동의) 모두에서 메타 데이터를 게시 할 서비스를 활성화

    • 필요 (끝점)에서 묻는 클라이언트가 해당 서비스 메타 데이터를 가져올 수 있습니다. MEX 끝점입니다. 이는 컴퓨터가 읽을 수있는 형식의 메타 데이터 (Visual Studio 또는 svcutil에서 클라이언트를 만드는 데 사용할 수있는 형식) 용입니다. 정의 된 HTTP 엔드 포인트가 없습니다

      <system.serviceModel> 
          <services> 
           <service name="WCFService.Service" behaviorConfiguration="ServiceBehavior"> 
            <host> 
             <baseAddresses> 
              <add baseAddress="net.tcp://localhost:8080/WCFService"/> 
             </baseAddresses> 
            </host> 
      
            <!-- Net.Tcp EndPoints--> 
            <endpoint address="" 
             binding="netTcpBinding" 
             contract="WCFService.IService" /> 
      
            <endpoint address="mex" 
             binding="mexTcpBinding" 
             contract="IMetadataExchange" /> 
      
            </service> 
           </services> 
           <behaviors> 
            <serviceBehaviors> 
             <behavior name="ServiceBehavior"> 
              <serviceMetadata httpGetEnabled="false" /> 
             </behavior> 
            </serviceBehaviors> 
           </behaviors> 
      </system.serviceModel> 
      

      ... 인간의 소비

    +0

    하지만 그는 mex 엔드 포인트없이 wsdl ... so를 사용하여이 작업을 수행 할 수 있습니까? –

    +0

    "mex endoint"를 생략하면 "svcutil"이 그걸 잡을 수 없습니까? –

    +0

    @ mid787 :''로 올바른 것으로 보입니다. MEX 끝 점이없는 URL에서 WSDL을 가져올 수 있습니다. (아마도'svcutil'도 마찬가지입니다. 서비스가 공개적으로 WSDL을 게시하는 한 실제로는 필요하지 않습니다. –

    7

    이 다음과 같은 상황에서 유용 할 것으로 보인다위한 것이 아닙니다 그리고 당신은 다음과 같은 방법으로 서비스를받을 수 있습니다. ..

    - Browser: http://localhost/WCFService/Service.svc  
    - svcutil.exe net.tcp://localhost:8080/WCFService/Service.svc/mex 
    

    MEX 끝점을 주석 처리하면 아무 것도 작동하지 않습니다.

    당신은 메타 데이터가 여전히) 나는 HTTP 엔드 포인트 및 B) 나는 특별히 설정을하지 않아도 ...

    으로 브라우저에서 볼 수있는 이유를 궁금해

    <serviceMetadata httpGetEnabled="false" /> 
    

    그 이유는 ... 웹 사이트에 대한 고급 설정에서 나는 고급 설정에서 사용할 수있는 프로토콜에 정의 된 다음 한 것입니다

    http,net.tcp

    http을 제거하면 브라우저에서 메타 데이터를 볼 수 없습니다. 이 시나리오에서는 net.tcp 만 웹 사이트를 사용할 수 있으므로 mex 끝점이 필요합니다.

    1

    MEX 끝점은 클라이언트가 http get 요청 대신 SOAP 메시지를 사용하여 서비스의 메타 데이터를 수신 할 수있게 해주는 특수 끝점입니다. http, https, tcp 및 심지어 명명 된 파이프를 통해 액세스 할 수있는 MEX 끝점을 만들 수 있습니다.

    MEX 엔드 포인트의 GetMetadata 조작을 호출 할 때 수신 할 응답에는 WSDL의 컨텐츠와 이에 링크 된 모든 XSD 파일이 포함됩니다.

    관련 문제