【发布时间】:2011-08-17 15:22:55
【问题描述】:
我有一个使用 .NET Remoting 通信的客户端-服务器应用程序。出于身份验证的原因,我必须编写一个自定义IClientChannelSink 以将会话 cookie 插入 HTTP 请求。 在服务器端,我还编写了一个自定义 IServerChannelSink 来从 HTTP 请求标头中读取服务器需要的一些信息。
客户端工作正常,但在服务器端我总是收到以下错误:
System.ArgumentNullException 未被用户代码处理 Message=No 在调用 DispatchChannelSink 之前对消息进行了反序列化。 参数名称:requestMsg Source=mscorlib ParamName=requestMsg
堆栈跟踪: 在 System.Runtime.Remoting.Channels.DispatchChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack,IMessage requestMsg,ITransportHeaders requestHeaders, 流 requestStream、IMessage& responseMsg、ITransportHeaders& responseHeaders,流和响应流) 在 MyAuthentication.MyServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack,IMessage requestMsg,ITransportHeaders requestHeaders, 流 requestStream、IMessage& responseMsg、ITransportHeaders& responseHeaders, Stream& responseStream) 中 C:\Dev\MyAuthentication\MyServerChannelSink.cs:第 82 行 在 System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack,IMessage requestMsg,ITransportHeaders requestHeaders, 流 requestStream、IMessage& responseMsg、ITransportHeaders& responseHeaders,流和响应流) 在 System.Runtime.Remoting.Channels.Http.HttpServerTransportSink.ServiceRequest(对象 状态) 在 System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow()
内部异常:
我的“ProcessMessage”-方法如下:
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
{
// Pre-processing before sending the message to the next sink in the chain
object state = null;
ProcessRequest(requestMsg, requestHeaders, ref requestStream, ref state);
/* Call the next sink in the chain */
sinkStack.Push(this, state);
ServerProcessing serverProcessing = this.NextChannelSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
// Processing from sink further in the chain has completed. Now do any post-processing before returning to the previous sink in the chain.
ProcessResponse(null, responseHeaders, ref responseStream, state);
return serverProcessing;
}
如果有人能告诉我出了什么问题,那就太好了。
【问题讨论】:
标签: c# .net remoting .net-remoting