Я нашел решение, которое работает для меня. В моей реализации IClientMessageInspector
я создал класс CorrelationObject
:
затем в BeforeSendRequest
я генерировать уникальные имена с тем же идентификатором, как префикс и хранить, что корреляционная объект запроса свойств:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var id = Guid.NewGuid();
var correlationObject = new CorrelationObject
{
RequestFileName = $"{id:N}_request.xml",
ResponseFileName = $"{id:N}_response.xml"
};
request.Properties.Add("CorrelationObject", correlationObject);
return correlationObject;
}
После этого WCF проход мой запрос к датчику сообщений
public override ArraySegment<byte> WriteMessage(Message message,
int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
// encoding and signing
var encodedMessage = string.Empty;
var correaltionObject = (CorrelationObject) message.Properties["CorrelationObject"];
File.WriteAllText(correaltionObject.RequestFileName, encodedMessage);
}
На данный момент я сохранил запрос. Для того, чтобы сохранить ответ, кодировщик сообщение я следующее:
public override Message ReadMessage(ArraySegment<byte> buffer,
BufferManager bufferManager, string contentType)
{
var content = Encoding.UTF8.GetString(buffer.ToArray());
var response = innerEncoder.ReadMessage(buffer, bufferManager, contentType);
response.Properties.Add("RawMessage", content);
// some other staff here..
}
А теперь WCF вызывает AfterReceiveReply
в моем сообщении инспектора
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var correlationObject = (CorrelationObject) correlationState;
File.WriteAllText(correlationObject.ResponseFileName,
reply.Properties["RawMessage"].ToString());
}
Теперь оба файла сохраняется с префиксом.