2012-09-07 28 views
1

我寫了一個由外部API稱爲REST WCF服務設置。該請求正在發送ISO-8859-1中的XML POST請求。這會導致我的服務發出400個錯誤的請求響應。ISO-8859-1字符在WCF請求

這裏是我的服務方法的存根:

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

目前,我試圖攔截請求並返回相應的內容類型:

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

這隻能如果我刪除了charset = ISO-8859-1標題。

我見過使用IClientMessageInspector和IDispatchMessageInspector的例子,但這些似乎具體到SOAP,除非我失去了一些東西。

我能做些什麼來解決這個問題?我無法控制傳入的請求。

感謝您的任何見解。

這裏的XML請求的第一部分:

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

好。我解決了這個問題。

我只需要從XmlElement的輸入類型更改爲一個流,並返回格式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; 
    } 
}