WCF在ASP.NET兼容模式和charset编码中

时间:2012-03-12 01:01:57

标签: c# asp.net wcf character-encoding

我正在开发相当大的Web应用程序,它使用WebServiceHostFactory在WCF上构建RESTful服务。 REST服务根据请求的首选项(AcceptCharset http标头)对响应进行编码,并将其作为MemoryStream返回。据我所知,MemoryStream应绕过WCF序列化。 Web应用程序和服务都托管在IIS中。

REST服务曾经以并排模式工作,但现在我们想要使用与WebScriptServiceHostFactory非常相似的配置为AJAX层添加更多WCF服务,而那些非常需要服务托管环境切换到asp.net兼容模式以访问http上下文进行身份验证和类似的东西。所以我将带有参数AspNetCompatibilityRequirementsMode.Allowed的AspNetCompatibilityRequirements属性添加到R​​EST服务类,然后添加到web.config。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

一切都运行得很好,请求utf-8编码的消息得到属性编码的响应,但我尝试的所有其他字符集类型最终都会响应破碎的特殊字符(例如ščřžýáíé)。当我在应用程序上关闭asp.net兼容模式时,可以正确处理许多其他字符编码(例如,windows-1250,iso-8859-2,utf-16)。

我认为它与asp.net http管道处理WCF服务的请求有关。有没有办法阻止它干扰我的响应编码?

2 个答案:

答案 0 :(得分:0)

我要说当你激活 aspNetCompatibilityEnabled 时,全球化元素的 requestEncoding responseEncoding 在您的web.config或machine.config中干扰您的WCF编码。

我不知道解决方案是否必须是程序化的:

http://msdn.microsoft.com/en-us/library/ms751486.aspx

http://blogs.msdn.com/b/drnick/archive/2008/02/26/using-call-context-initializers-for-culture.aspx

答案 1 :(得分:0)

仅供记录:最后我们发现自定义输出过滤器中存在错误,它有UTF-8硬编码。