问题描述
用了接口来做Remoting对象的传递,接口定义如下namespaceNetRemoteInterface{publicinterfaceIRemoteInterface{stringgetNeedStr(stringcallstr);HotelInfogetHotelInfo(intcode,stringname);}[Serializable]publicclassHotelInfo{publicintHotelCode;publicstringHotelName;}}服务端实现接口的代码如下:[Serializable]publicclasschannelDemo:System.MarshalByRefObject,IRemoteInterface{publicchannelDemo(){}publicstringgetNeedStr(stringcallstr){return"Igetitstring."+callstr;}publicHotelInfogetHotelInfo(intcode,stringname){HotelInforot=newHotelInfo();rot.HotelCode=code;rot.HotelName=name;returnrot;}}客户端调用getHotelInfo方法可以用断点检查到但是返回的时候出现如下错误:"Unabletofindassembly'RemoteServer,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'."客户端的调用方法如下:ChannelServices.RegisterChannel(newTcpClientChannel(),true);IRemoteInterfacerService=(IRemoteInterface)Activator.GetObject(typeof(IRemoteInterface),"tcp://localhost:8085/Hellos");if(rService==null){toolStripStatusLabel1.Text="NULLOBJ";}else{try{//label2.Text=rService.getNeedStr("SSSP");NetRemoteInterface.HotelInfotpt=(NetRemoteInterface.HotelInfo)rService.getHotelInfo(8888,"SCODE");toolStripStatusLabel1.Text=tpt.HotelName;}catch(Exceptionexp){toolStripStatusLabel1.Text=exp.Message;}finally{}请问有什么问题}
解决方案
解决方案二:
up
解决方案三:
客户端的接口定义和服务器端的接口实现一定要版本一样,重新将两者编译一次后分别拷到客户端和服务器端试一下
解决方案四:
接口定义在客户端和服务端都是一样的
解决方案五:
把服务端的[Serializable]去掉!
解决方案六:
客户端调用getHotelInfo方法可以用断点检查到是什么意思?服务端的[Serializable]是要去掉的建议你先把SERVER端用VS跑起来再直接去执行生成的CLIENT端EXE文件看是不是可以单步进服务端的publicHotelInfogetHotelInfo(intcode,stringname)方法.不可以就是配置有问题,或者你客户段连接语句有问题.至于你的对象和接口的使用是没有问题的
解决方案七:
up
解决方案八:
谢谢各位,不过你们说的这些我都试过了,依然出上面所描述的问题。"客户端调用getHotelInfo方法可以用断点检查到",这句话我描述的有问题,我是指客户端调用getHotelInfo方法,在服务端是可以跟踪到有执行的,所以怀疑是返回的时候出现的错误。
解决方案九:
帮你顶!
解决方案十:
RemoteServer是什么???把服务端的代码都贴出来看看!
解决方案十一:
不懂,帮顶一下
解决方案十二:
"Unabletofindassembly'RemoteServer,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'."RemoteServer是你的DLL文件?这个很明显是找不到程序集~~如果RemoteServer是服务端项目名~~还能调试进去我也不知道你出什么错了是DLL文件你就编译重新引用下
解决方案十三:
服务器端的代码如下:channel=newTcpServerChannel(8085);ChannelServices.RegisterChannel(channel,true);RemotingConfiguration.RegisterWellKnownServiceType(typeof(channelDemo),"Hellos",WellKnownObjectMode.SingleCall);//channel.StartListening(null);toolStripStatusLabel1.Text="channelopen!port:8085";另外RemoteServer是服务端项目名