Разработка распределенных приложений в Microsoft.NET Framework




Пример 3


class EncryptedClientChannelSink: IClientChannelSink

{

public IDictionary Properties

{

get { return null; }

}

private IClientChannelSink nextSink;

public IClientChannelSink NextChannelSink

{

get { return nextSink; }

}

private SymmetricEncryptor encryptor;

public EncryptedClientChannelSink(SymmetricEncryptor channelEncryptor,

IClientChannelSink next)

{

encryptor = channelEncryptor;

nextSink = next;

}

public void ProcessMessage(IMessage message,

ITransportHeaders requestHeaders, Stream requestStream,

out ITransportHeaders responseHeaders, out Stream responseStream)

{

MemoryStream encryptedStream = new MemoryStream();

Stream serverStream = null;

// Зашифровать запрос клиента

encryptor.Encrypt(requestStream, encryptedStream);

encryptedStream.Position = 0;

nextSink.ProcessMessage(message, requestHeaders, encryptedStream,

out responseHeaders, out serverStream);

serverStream = Utils.ReadAllStream(serverStream);

// Расшифровать ответ сервера

responseStream = new MemoryStream();

encryptor.Decrypt(serverStream, responseStream);

responseStream.Position = 0;

}

public Stream GetRequestStream(IMessage msg, ITransportHeaders headers)

{

return null;

}

public void AsyncProcessRequest(IClientChannelSinkStack sinkStack,

IMessage message, ITransportHeaders headers, Stream stream)

{

throw new NotSupportedException();

}

public void AsyncProcessResponse(

IClientResponseChannelSinkStack sinkStack, object state,

ITransportHeaders headers, Stream stream)

{

throw new NotSupportedException();

}

} // EncryptedClientChannelSink




Содержание  Назад  Вперед