我的团队遇到了一个特殊字符问题,这些问题只会导致Web服务器出现问题。我们在本地调试时尝试重现此错误,但到目前为止还没有成功。我们会提供任何帮助,以便找出在本地运行时我们没有收到此错误的原因。有什么区别使它只在我们的测试环境中失败?
我们正在尝试将COM +组件迁移到WCF,作为这一步,我们通过将记录集serizalizing / deserializing到XML直接从传统的ASP页面调用WCF服务。
当我们尝试保存像',<这样的特殊字符时,会出现问题。或者&'。我们对这些的编码进行了特殊处理,如下所示:
Function XMLEncode(byVal string)
Dim tmp, i
tmp = string
For i = 160 to 255
tmp = Replace(tmp, chr(i), "&#" & i & ";")
Next
tmp = Replace(tmp, chr(34), """) ' "
tmp = Replace(tmp, chr(39), "'") ' '
tmp = Replace(tmp, chr(60), "<") ' <
tmp = Replace(tmp, chr(62), ">") ' >
tmp = Replace(tmp, chr(38), "&") ' &
XMLEncode = tmp
End Function
它似乎在本地工作正常,但在测试环境中运行网站时,我们会收到与这些字符相关的错误消息。
我们需要提示还有什么可能导致服务器上的故障,而不是本地计算机上的故障。
我们尝试过的事情:
- 在本地运行Web,目标是测试环境数据库和WCF服务,这应该排除与WCF或数据的任何差异。
- 比较本地使用的web.config与测试环境中使用的web.config,但没有发现差异。
- 比较本地开发计算机与测试环境服务器的语言区域设置,而不会发现差异。它被设置为“英语(美国)”。
- 将请求标题和文档模式与IE中的F12开发人员工具进行比较,但未发现编码或类似内容的任何差异。
Web项目是.NET 2.0,当我们在IIS7.5中运行本地时,在Test环境服务器上运行它是IIS6。我们正在使用MsXml2在Web端序列化/反序列化。
提前致谢
答案 0 :(得分:0)
谢谢Paul,在最初的问题下面的评论中提出了答案。
使用ChrW而不是Chr解决了这个问题。工作代码在下面剪断。
Function XMLEncode(byVal string)
Dim tmp, i
tmp = string
For i = 160 to 255
tmp = Replace(tmp, chrw(i), "&#" & i & ";")
Next
tmp = Replace(tmp, chrw(34), """) ' "
tmp = Replace(tmp, chrw(39), "'") ' '
tmp = Replace(tmp, chrw(60), "<") ' <
tmp = Replace(tmp, chrw(62), ">") ' >
tmp = Replace(tmp, chrw(38), "&") ' &
XMLEncode = tmp
End Function