我有一个使用.NET Remoting通信的客户端服务器应用程序。出于身份验证的原因,我必须编写自定义IClientChannelSink以将会话cookie插入到HTTP请求中。 在服务器端,我还写了一个自定义IServerChannelSink以从HTTP请求标头中读取服务器需要的一些信息。自定义.NET Remoting IServerChannelSink
的客户端工作正常,但在服务器端,我总是得到以下错误:
System.ArgumentNullException was unhandled by user code Message=No message was deserialized prior to calling the DispatchChannelSink. Parameter name: requestMsg Source=mscorlib ParamName=requestMsg
StackTrace: at System.Runtime.Remoting.Channels.DispatchChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) at MyAuthentication.MyServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) in C:\Dev\MyAuthentication\MyServerChannelSink.cs:line 82 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.Http.HttpServerTransportSink.ServiceRequest(Object state) at System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow()
InnerException:
我“的ProcessMessage” -methodlooks如下:如果有人
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;
}
将是巨大的可以告诉我什么是错的。
你有任何示例代码如何处理这些情况?我找不到Web中IClientChannelSink的任何参考实现。我的IClientChannelSink实现应该只能从HTTP头中读取一些值,但不能以任何方式改变请求消息。 – Alexander
在MSDN中有一个示例实现。但它似乎与我的实现类似http://msdn.microsoft.com/en-us/library/system.runtime.remoting.channels.iserverchannelsink(v=VS.80).aspx – Alexander