2011-11-02 2 views
2

요청에 SOAPAction 헤더가 필요하지 않도록 WCF에서 웹 서비스를 구현하고 메시지 본문 루트 요소 이름을 사용하여 호출을 보내려면 어떻게해야합니까? 기본적으로 BasicHttpBinding에는 SOAPAction이 필요합니다.SOAPAction 헤더가없는 WCF 웹 서비스

SOAPActions를 사용하지 않는 클라이언트와의 호환성을 제공하려면이 설정이 필요합니다. 이 내 SOAP 메시지입니다 :

<?xml version='1.0' encoding='UTF-8'?> 
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
<env:Body> 
<messageDeliveryReport xmlns="http://bogus/ns"><status>D</status><systemName>cc</systemName></messageDeliveryReport> 
</env:Body></env:Envelope> 

와 나는 'messageDeliveryReport'작업을 호출합니다. 감사!

An HTTP client MUST use this header field when issuing a SOAP HTTP Request. 

그래서 당신이 상대하고있는 것은 2000 년부터 존재했던 것 표준을 준수하지 않는 클라이언트 : 그것은은 BasicHttpBinding의 문제가 아니다

답변

4

, 그것은 말한다 the SOAP 1.1 standard 준수의 문제입니다 MSDN 문서 Extending WCF with Custom Behaviors에 자세히 설명되어있는 WCF의 확장 성 지점 중 하나를 구현하여이 문제를 해결할 수도 있습니다. 아마도 IDispatchMessageInspector 또는 IDispatchOperationSelector 중 하나일지도 모릅니다. 실제로 유효한 SOAP 요청이 아닙니다.

+0

클라이언트가 * .asmx ASP.Net 웹 서비스 용으로 구현되었고 SOAPAction 헤더를 사용하지 않았기 때문입니다. 하지만 이제는 클라이언트 앱 개발자가 클라이언트를 업데이트하고 표준을 준수하도록 설득하는 것이 더 합리적이라고 생각합니다. – nightwatch

+3

문제는 WCF가 표준과 호환되지 않는 SOAP 1.2 호출 용 SOAPAction 헤더를 필요로한다는 것입니다. – gbjbaanb

2

this sample을 따라 메시지 본문의 루트 요소를 기반으로 SOAP 메시지를 작업에 전달하는 사용자 지정 동작을 구축 할 수 있습니다.

+0

'...이 스택의 클라이언트 측은 빈 또는 임의의 HTTP SoapAction 헤더를 사용하여 메시지를 보낼 수 있습니다 ... '빈 헤더가 괜찮다고 생각합니다. 문제는 헤더가 전혀 없다는 것입니다. –