如何处理Remoting中报Binary Fomatter版本冲突问题
问题:
采用IIS进行远程代理对象调用时,如果传递的信息格式采用Binary Fomat而不是soap时,则有可能报这个错误。
该错误报错的信息如下:“BinaryFormatter 版本不兼容。应为版本 1.0。接收到的版本为 1818838574.1953451621。”
原因:
引起该错误的原因其实不是版本冲突问题,一般错误是由于服务器端产生错误,IIS将该错误以网站方式处理成404,500等相应错误提示信息,并发送给客户端,而客户端接收到错误信息时,则按BinaryFormatter方式处理,这样,客户端在处理错误信息时,遇到了<html>...时就会报出该错误。
解决方法:
可采用工具在服务器端捕捉服务器端抛出的异常信息是什么,根据该信息处理错误。
捕捉服务器及客户端的通讯信息软件很多,我用的是www.pocketsoap.com的TcpTrace工具,在服务器端运行TcpTrace,将Listen Port改为81,并开始监听,在另一台客户端电脑上,修改客户端软件的Chennel Port为81,如果是配置文件,则应修改配置文件内容,运行客户端软件,并启动。TcpTrace将捕捉所有通讯信息,包括异常。
根据异常修改程序即可。
在客户端要首先判断是否可以访问到服务器端的Remoting对象,判断方法如下:
在客户端启动IE浏览器,并在地址栏输入:“http://RemotingServerSite/RemotingService/ServiceClass.rem?wsdl”,以上的RemotingServerSite为服务器地址,RemotingService为IIS上的虚拟目录名称,ServiceClass则为服务器端的远程对象类名。
如http://localhost/NetDraw/Paper.rem?wsdl
根据异常修改程序即可。
在客户端要首先判断是否可以访问到服务器端的Remoting对象,判断方法如下:
在客户端启动IE浏览器,并在地址栏输入:“http://RemotingServerSite/RemotingService/ServiceClass.rem?wsdl”,以上的RemotingServerSite为服务器地址,RemotingService为IIS上的虚拟目录名称,ServiceClass则为服务器端的远程对象类名。
如 http://localhost/NetDraw/Paper.rem?wsdl
以上仅讨论Remoting采用WellKnownType的情况。