2012-09-07 3 views
1

외부 API에서 호출되는 REST WCF 서비스를 작성했습니다. 요청은 ISO-8859-1에서 XML POST 요청을 보냅니다. 이로 인해 내 서비스에서 400 건의 잘못된 요청 응답이 발생합니다. 여기 WCF 요청에서 ISO-8859-1 문자 집합

내 서비스 방법의 스텁이다 : 나는를 제거하면

public class XmlContentTypeMapper : WebContentTypeMapper 
{ 
    public override WebContentFormat GetMessageFormatForContentType(string contentType) 
    { 
     return WebContentFormat.Xml; 
    } 
} 

이 유일한 작품 : 현재

[OperationContract] 
[WebInvoke(Method ="POST", UriTemplate="/", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] 
[FaultContract(typeof(String))] 
XmlElement GetInstructions(XmlElement request); 

, 내가 요청을 차단하고 해당 콘텐츠 형식을 반환하기 위해 노력하고있어 charset = 헤더에서 ISO-8859-1.

IClientMessageInspector 및 IDispatchMessageInspector를 사용하는 예를 보았습니다. 그러나 뭔가 빠진 것이 아니라면 SOAP에만 해당되는 것으로 보입니다.

이 문제를 해결하려면 어떻게해야합니까? 들어오는 요청을 제어 할 권한이 없습니다.

어떤 통찰력에도 감사드립니다.

POST http://localhost:54814/autocallerid.svc HTTP/1.1 
Host: localhost:54814 
Content-Type: text/xml, charset=ISO-8859-1 
Content-Length: 1734 

<?xml version="1.0" encoding="UTF-8"?> 
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"> 
    <Subject SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"> 
.... 
+0

무엇 XML 선언의 시작이 생겼는데? –

답변

1

좋아요 :

다음은 XML 요청의 첫 번째 부분입니다. 나는이 문제를 해결했다.

입력 유형을 XmlElement에서 Stream으로 변경하고 WebContentFormat.Raw 형식으로 반환해야했습니다.

과 같이 :

[OperationContract] 
[WebInvoke(Method ="POST", UriTemplate = "/info", BodyStyle = WebMessageBodyStyle.Bare, 
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] 
[FaultContract(typeof(String))] 
XmlElement GetInstructions(Stream request); 

그리고이 :

public class XmlContentTypeMapper : WebContentTypeMapper 
{ 
    public override WebContentFormat GetMessageFormatForContentType(string contentType) 
    { 
     return WebContentFormat.Raw; 
    } 
}