2011-01-14 3 views
1

SOAP 끝점을 사용하여 전통적인 WCF 서비스를 구성했습니다. 클라이언트 프로젝트에서 Service Reference 등을 추가했습니다. 이들은 예상대로 작동합니다.JSON, JSONP 및 SOAP 끝점이있는 WCF 서비스

.svc 파일, 웹 설정 등을 수정하여 JSONP 지원 WCF 서비스를 만들었습니다. 테스트 할 테스트 클라이언트 페이지를 만들었습니다. JSONP 서비스를 성공적으로 호출하고 있습니다.

그러나 웹 구성에 대한 변경 사항은 SOAP 서비스에 대한 서비스 참조를 위반했습니다. 두 가지 유형의 종점을 모두 사용하고 싶습니다. 서비스 및 웹 구성을 구성하는 방법을 잘 모르겠습니다. HTTP 만, (이 SOAP 또는 JSONP를위한 것입니다 관계없이 경우) 모든 작업을 장식 할 수 있습니다받을 경우

: 다음 [WebGet(ResponseFormat = WebMessageFormat.Json)]

내 서비스 클래스 필요 : [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

지금 업데이트 할 때 내 내 클라이언트 프로젝트의 서비스 참조

바인딩 인스턴스가 이미 'http : // flixsit : 1000/FlixsitWebServices.svc'수신 대기하고 있습니다. 두 개의 엔드 포인트가 동일한 ListenUri을 공유하려는 경우에도 동일한 바인딩 오브젝트 인스턴스를 공유해야합니다. 충돌하는 두 종점은 AddServiceEndpoint() 호출, 구성 파일 또는 AddServiceEndpoint()와 config의 조합으로 지정되었습니다.

SOAP 구성을 내 webconfig에 추가하면 JSONP 끝점도 손상됩니다. 클라이언트 측에서 JSONP를 호출하면 클라이언트 서비스 참조 (또는 프록시 생성)가 필요하지 않지만 SOAP는 올바른가?

내 서비스 WebConfig는 :

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="webHttpBehavior"> 
     <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="DefaultBehaviors">   
     <serviceMetadata httpGetEnabled="true" />   
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <webHttpBinding> 
     <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" /> 
    </webHttpBinding> 
    <basicHttpBinding> 
     <binding name="BasicHttpEndpointBinding" /> 
    </basicHttpBinding> 
    </bindings> 
    <services> 
    <service name="Flixsit.Services.FlixsitWebServices" behaviorConfiguration="DefaultBehaviors"> 
     <endpoint name="JSONPEndPoint" address="" 
            binding="webHttpBinding" 
            bindingConfiguration="webHttpBindingWithJsonP" 
            contract="Flixsit.Services.IFlixsitWebServices" 
            behaviorConfiguration="webHttpBehavior" /> 
     <endpoint name="HttpEndPoint" address="" 
            binding="basicHttpBinding" 
            contract="Flixsit.Services.IFlixsitWebServices" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://Flixsit:1000/FlixsitWebServices.svc" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
+0

전체 구성을 볼 수 있도록 질문을 수정하십시오. –

답변

0

오류는 문제를 명확하게 설명합니다. 같은 주소이지만 바인딩이 다른 두 개의 엔드 피트가 있습니다. 허용되지 않습니다. 엔드 포인트에서 address = "jsonp"를 바인딩 webHttpBinding으로 설정하십시오./에있는 끝점을 호출합니다. .svc/jsonp

+0

HTTP 상태 400을 얻었습니다. SOAP (Service Reference)를 추가하거나 JSONP EndPoint를 호출 할 수 없었습니다. 이 줄을 제거했습니다 : Factory = "System.ServiceModel.Activation.WebServiceHostFactory", 내 .svc 파일에서 Service Reference를 추가 할 수 있었지만 JSONP는 여전히 작동하지 않습니다. 주어진 도움 주셔서 감사 ... – obautista