我有一個使用.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