首页 > 解决方案 > 升级到 Server 2019 后 WCF 服务编码单引号

问题描述

将我们的网络服务器升级到 Windows 2019(从 2008 年开始)后,我们的 WCF 服务 (.NET 3.5) 响应是 html 编码的。为澄清起见,响应应该是一个编码的 xml 字符串(有意地,通过 System.Web.HttpUtility.HtmlEncode) - 但在升级之后,响应似乎被编码了两次。这是一个例子:

服务器升级前的旧响应(注意 ResultName 上的单引号未编码):

<a:ResultData><![CDATA[&lt;Result&gt;&lt;schema&gt;&lt;ts name='ResultName' … </a:ResultData>

服务器升级后的新响应(单引号被编码)

<a:ResultData><![CDATA[&lt;Result&gt;&lt;schema&gt;&lt;ts name=&#39;ResultName&#39; … </a:ResultData>

是否有任何我们可能错过的 IIS 设置会导致这种行为?还是我们需要启用/禁用的某些 WCF 特定行为?我在网上四处查看,还没有找到任何特定于这个问题的信息。鉴于代码本身并没有改变并且它曾经可以工作,我们正在查看服务器配置以提供答案,但还没有找到罪魁祸首。

感谢您的帮助!

标签: c#wcfencodesingle-quotessystem.web

解决方案


问题出在 System.Web.HttpUtility.HtmlEncode 的版本中。

System.Web v2 不编码单引号,但 System.Web v4 可以。

不幸的是,我们没有在我们的新服务器上设置我们的应用程序池,并且 WCF 服务在更新版本的 .NET 中运行,该版本加载了对单引号进行编码的 System.Web v4 的更新版本。

一旦为 WCF 服务分配了正确的应用程序池,问题就解决了。


推荐阅读