.NET Remoting 통신을 사용하는 클라이언트 - 서버 응용 프로그램이 있습니다. 인증을 이유로 HTTP 요청에 세션 쿠키를 삽입하기 위해 사용자 정의 IClientChannelSink을 작성해야했습니다. 서버 쪽에서 나는 서버가 HTTP 요청 헤더에서 필요로하는 정보를 읽기 위해 사용자 정의 IServerChannelSink을 작성했다.사용자 지정 .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;
}
사람 있으면 좋은 것 뭐가 잘못 됐는지 말해 줄 수있어.
이러한 사례를 처리하는 방법에 대한 샘플 코드가 있습니까? 웹에서 IClientChannelSink에 대한 참조 구현을 찾을 수 없습니다. 내 IClientChannelSink 구현은 HTTP 헤더에서 일부 값을 읽지 만 요청 메시지는 변경하지 않아야합니다. – Alexander
MSDN에는 샘플 구현이 있습니다. 하지만 그것은 내 구현과 비슷한 것으로 보인다 http://msdn.microsoft.com/en-us/library/system.runtime.remoting.channels.iserverchannelsink(v=VS.80).aspx – Alexander