У меня есть клиент-серверное приложение, которое использует связь .NET Remoting. Из соображений аутентификации мне пришлось написать пользовательский IClientChannelSink , чтобы вставить сессионный cookie в HTTP-запросы.
На стороне сервера я также написал пользовательский IServerChannelSink для чтения некоторой информации, которая нужна серверу, из заголовков HTTP-запроса.
Клиентская сторона работает нормально, но на серверной стороне я всегда получаю следующую ошибку:
System.ArgumentNullException не было обработано кодом пользователя Сообщение = Нет
сообщение было десериализовано до вызова DispatchChannelSink.
Имя параметра: requestMsg Source = mscorlib ParamName = requestMsg
Трассировки стека:
в
System.Runtime.Remoting.Channels.DispatchChannelSink.ProcessMessage (IServerChannelSinkStack
SinkStack, IMessage requestMsg, ITransportHeaders requestHeaders,
Поток requestStream, IMessage & responseMsg, ITransportHeaders &
responseHeaders, Stream & responseStream)
в
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, Stream & responseStream)
в
System.Runtime.Remoting.Channels.Http.HttpServerTransportSink.ServiceRequest (Объект
государство)
в
System.Runtime.Remoting.Channels.SocketHandler.ProcessRequestNow ()
InnerException:
Мой метод "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;
}
Было бы замечательно, если бы кто-нибудь мог сказать мне, что случилось.