Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET兼容模式下的WCF和字符集编码_C#_Asp.net_Wcf_Character Encoding - Fatal编程技术网

C# ASP.NET兼容模式下的WCF和字符集编码

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服务,这些

我正在开发一个相当大的web应用程序,它使用
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模式下,我需要创建自定义端点行为类,其中包含一段将设置编码的代码。在并排模式下,不需要这些。我理解正确吗?是的,你理解正确,但那只是我的观点。如果您能找到基于配置/属性的更灵活的解决方案,我会很感兴趣。