升级到 Server 2019 后 WCF 服务编码单引号

Posted

技术标签:

【中文标题】升级到 Server 2019 后 WCF 服务编码单引号【英文标题】:WCF Service encoding single quotes after upgrade to Server 2019 【发布时间】:2020-09-28 22:40:26 【问题描述】:

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

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

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

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

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

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

感谢您的帮助!

【问题讨论】:

在CDATA中,所有的转义字符都将转义为实体,单引号将转换为实体为“'”。至于单引号在windows 2008上没有转换,我觉得和系统有关。 感谢丁鹏——这就是我要找的——两个系统之间的差异导致了一个系统的额外编码,而不是另一个系统。还没有运气。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于升级到 Server 2019 后 WCF 服务编码单引号的主要内容,如果未能解决你的问题,请参考以下文章

从Windows Server 2016到Windows Server 2019升级案例

升级到 .NET 4.5 和 EF5。不再能够部署 WCF 服务。

Windows Server 2012 R2 上的 Windows 服务 PlatformNotSupportedException 上的 WCF

升级到 .NET 4.5 后获取 AddressAlreadyInUseException

如何在 Visual Studio 2019 中将 WCF 服务添加到 .NET Core 项目?

WCF / EF / SQL Server / VS2017 / C#:多层应用程序在部署到本地 IIS 10.0 作为托管服务器时出错