上个星期我在一个客户端程序(一个实时处理程序,要调用一些底层的硬件,为了方便调试,我写了一个模拟底层硬件的库)里调用WebService的一个方法的时候,发现我要调用的某个方法,在IE的调试界面下,运行正确,在我使用模拟方式运行程序的时候,调用也很OK,就是当使用真实的底层硬件的时候,老是报XmlException错误。
但是,奇怪的是,我真实硬件环境下调用这个ASMX的其它方法,确总是正确。
我一开始,以为是我的模拟器有什么问题,当后来我觉得是.NET本身的问题。
于是我开始在Newgroups,在Google里查找相关的信息。尤其在Google里查找ScanHexEntity看到了和我类似的情况。从中可以看出,这是一个.NET XML Serialization Bug,然后在用Web引用时,VS.NET自动生成的Proxy里(就是SoapHttpClientProtocol)用到了XML Serialization,调用Web Service就出错了,有人也遇到了和我类似的事情。于是这个BUG就发生在我的身上了
虽然现在我解决了在真实硬件环境下调用这个WebService的方法(后面讲我的无奈的怪招),但我还是有个地方很想不通:
出问题的这个方法没有什么特别的,就是简单的public string Auth(string clientcode),和其他正常的方法没有什么特殊的。难道是clientcode由底层硬件返回的时候,这个字符串的编码有问题?
我解决这个郁闷问题的方法是,在.NET Windows Client里使用SOAP Toolkit3来调用那个讨厌的出错方法。是不是很无奈呀!