2011-01-16 3 views
1

저는 WCF에 처음 왔으므로 저와 함께하시기 바랍니다.WCF Starter Kit를 사용하여 SOAP 끝점을 노출하려면 어떻게해야합니까?

WCF REST 스타터 키트의 최신 버전을 사용하여 Android 애플리케이션에서 호출하는 웹 서비스를 만들었습니다. RESTful 엔드 포인트가 잘 작동하지만 .NET 클라이언트가이를 사용하고 필요한 모든 클래스를 생성 할 수 있도록 SOAP 엔드 포인트를 작성하려고합니다.

저는 여전히 기본 구성 파일을 사용하고 있으며, 제가해야 할 일에 대해 약간 혼란 스럽습니다.

여기에 내가 내가 어딘가에 설정 파일에 다음을 추가 할 필요가 있다고 생각

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    </system.webServer> 

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <!-- 
      Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
      via the attributes on the <standardEndpoint> element below 
     --> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    </system.serviceModel> 

</configuration> 

하지만 나는 옳은 길을 생각하면 나는 어디에 속해 확실치 나.

<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="Service1"/> 
<endpoint name="soap" address="soap" binding="basicHttpBinding" contract="Service1"/> 

나는 오직 하나의 클래스를 가지고 있으며 Service1.cs 만 있습니다. 나는 약간의 변화를 시도했지만 나는 성공하지 못했다.

내가 추가해야 할 것이 있고 필요한 이유에 대한 설명이 훌륭하다는 것을 알고 싶습니다.

- 업데이트 -

나는 서비스 태그를 삽입 후, 문제가지고 있고 있었다 비주얼 스튜디오에서 작업 기능 '서비스 참조 추가'. 나는 'HttpGetEnabled'가 사실 일 필요가 있다는 것을 알아 냈으므로 서비스 메타 데이터를 http에 게시 할 것입니다.

나는 이것을 추가했고 그것이 작동하는 것처럼 보인다.

<behaviors> 
      <serviceBehaviors> 
       <behavior name="Service1Behavior"> 
        <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 

서비스를 추가하는 경우 해당 서비스에 대해 두 개의 끝점을 더 만들어야합니까?

감사합니다. 당신이 당신의 서비스에 추가 끝점을 노출 할 경우

답변

0

, 당신은 당신의 설정에 <service name="...."> 태그들을 추가해야합니다 : 당신은 분명히 4 표준 엔드 포인트가 노출되는 WCF를 사용하고

<system.serviceModel> 
    <services> 
    <service name="NameSpace.ServiceClassName> 
     <endpoint name="rest" 
       address="" 
       binding="webHttpBinding" 
       contract="IService1" /> 
     <endpoint name="soap" 
       address="soap" 
       binding="basicHttpBinding" 
       contract="IService1" /> 
     <endpoint name="mex" 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
    </services> 
</system.serviceModel> 

- 당신이 경우 그것을 바꾸고 싶다면 필요한 모든 설정을 명시 적으로 철자해야합니다.

이제합니다 (NameSpace 네임 스페이스에 ServiceClassName에 구현 된) 서비스는 세 가지 엔드 포인트가됩니다

  • 사용하여 REST 엔드 포인트가 될 것이다 * SVC는 파일의 기본 주소를 webHttpBinding
  • (service.svc)/soap 주소는 동일한 계약 (동일한 서비스 방법)이지만 SOAP 기반의 basicHttpBinding
  • 주소를 사용하면 (service.svc)/mex 주소는 SOAP 클라이언트에 대한 서비스 메타 데이터를 갖게됩니다
관련 문제