C# ASP.NET兼容模式下的WCF和字符集编码
我正在开发一个相当大的web应用程序,它使用C# ASP.NET兼容模式下的WCF和字符集编码,c#,asp.net,wcf,character-encoding,C#,Asp.net,Wcf,Character Encoding,我正在开发一个相当大的web应用程序,它使用WebServiceHostFactory在WCF上构建了一个RESTful服务。REST服务根据请求的首选项(AcceptCharset http头)对响应进行编码,并将其作为MemoryStream返回。据我所知,MemoryStream应该绕过WCF序列化。web应用程序和服务都托管在IIS中 用于并排工作模式的休息服务,但是现在我们想使用与WebScriptServiceHostFactory非常类似的配置为AJAX层添加更多的WCF服务,这些
WebServiceHostFactory
在WCF上构建了一个RESTful服务。REST服务根据请求的首选项(AcceptCharset http头)对响应进行编码,并将其作为MemoryStream返回。据我所知,MemoryStream应该绕过WCF序列化。web应用程序和服务都托管在IIS中
用于并排工作模式的休息服务,但是现在我们想使用与WebScriptServiceHostFactory
非常类似的配置为AJAX层添加更多的WCF服务,这些服务几乎需要将服务托管环境切换到asp.net兼容模式,以访问http上下文进行身份验证等等。因此,我将参数为AspNetCompatibilityRequirements.Allowed
的AspNetCompatibilityRequirements属性添加到REST服务类中,并将以下行添加到web.config中
一切都运行得很好,请求utf-8编码的消息得到了正确编码的响应,但我尝试的所有其他字符集类型最终都会以断开的特殊字符(例如,šřšýáé)作为响应。当我在应用程序上关闭asp.net兼容模式时,可以正确处理许多其他字符编码(例如windows-1250、iso-8859-2、utf-16)
我认为这与asp.NETHTTP管道处理的WCF服务请求有关。有没有办法阻止它干扰我的响应编码?我想说,当您激活aspNetCompatibilityEnabled时,web.config或machine.config中全球化元素的requestEncoding和responseEncoding会干扰您的WCF编码 我不知道解决方案是否必须是程序化的:
仅作记录:最后我们发现自定义输出过滤器中有一个bug,它采用了UTF-8硬编码。因此,在aspNetCompatibility模式下,我需要创建自定义端点行为类,其中包含一段将设置编码的代码。在并排模式下,不需要这些。我理解正确吗?是的,你理解正确,但那只是我的观点。如果您能找到基于配置/属性的更灵活的解决方案,我会很感兴趣。