创建客户端的连接对象代码如下:
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel);
IRecordingsManager mgr = (IRecordingsManager) Activator.GetObject(typeof(IRecordingsManager),"http://localhost:7100/GetRecordingsManager.soap");
创建服务端的连接对象代码如下:
HttpChannel channel = new HttpChannel(7100);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RecordingsManager),"GetRecordingsManager.soap",WellKnownObjectMode.Singleton);
接口代码如下:
public interface IRecordingsManager
{
DataSet GetRecordings();
string RayReturn();
bool SQL2DS(string selectCmd,ref DataSet dataSet,ref string returnString);
}
远程对象代码如下:
public class RecordingsManager : MarshalByRefObject, IRecordingsManager
{
public string RayReturn()
{
return "test";
}
}
客户端运行后,报错的信息如下:
指定的 SOAPAction 无效:"http://schemas.microsoft.com/clr/nsassem/Ray.IRecordings
Manager/ServerUpTcp_Pos#RayReturn"
困惑中。。。。。。。
客户端指向地址明明是:http://localhost:7100/GetRecordingsManager.soap
为何会报成:http://schemas.microsoft.com/clr/nsassem/Ray.IRecordings
Manager/ServerUpTcp_Pos#RayReturn"
多种方法检测结果如下:
1。在服务器端启动后,IE直接输入http://localhost:7100/GetRecordingsManager.soap地址,IE报错如下
System.ArgumentNullException: 调用 DispatchChannelSink 之前没有反序列化任何消息。参数名: requestMsg at System.Runtime.Remoting.Channels.DispatchChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.Channels.SoapServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.MetadataServices.SdlChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.Channels.Http.HttpServerTransportSink.ServiceRequest(Object state) at System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow()
2。将上面的localhost换成IP地址输入http://10.50.7.131:7100/GetRecordingsManager.soap,IE报错如下:无法显示网页。