로깅 목적으로 WCF에 구현 된 내 RESTful 웹 서비스로 보낸 원시 요청을 받고 싶습니다.WCF에서 요청의 원시 바이트를 어떻게 가져올 수 있습니까?
이미 IDispatchMessageInspector
을 구현했습니다. AfterReceiveRequest
을 구현할 때 메시지의 내용이 유효하지 않은 경우에도 (그리고 특히) 메시지의 원시 바이트를 뱉어 내고 싶습니다. 이것은 디버깅을위한 것입니다. 내 서비스는 완벽하게 작동하지만 서비스를 호출하려고하는 클라이언트의 문제 (원시 바이트)가 무엇인지 알기 위해 도움이되는 경우가 종종 있습니다.
예를 들어 올바른 형식의 XML 문서를 보내는 대신 문자열 "your mama"를 내 서비스 끝점에 게시한다고 가정 해 봅시다. 나는 그들이 그렇게 한 것을보고 싶다. 메시지 내용이 이미 올바른 형식의 XML이 아니라면 불행하게도 MessageBuffer::CreateBufferedCopy()
을 사용하면 작동하지 않습니다. 여기
// The immediately following line raises an exception if the message
// does not contain valid XML. This is uncool because I want
// the raw bytes regardless of whether they are valid or not.
using (MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue))
{
using (MemoryStream stream = new MemoryStream())
using (StreamReader reader = new StreamReader(stream))
{
buffer.WriteMessage(stream);
stream.Position = 0;
Trace.TraceInformation(reader.ReadToEnd());
}
request = buffer.CreateMessage();
}
내 생각이 나는 그것이 Message
된다 전에 원시 요청 얻을 필요가있다 :
여기에 (대략) 이미 AfterReceiveRequest
내 구현이 무엇인지입니다. 이것은 대부분 IDispatchMessageInspector
보다 WCF 스택의 하위 수준에서 수행되어야합니다.
누구든지이 작업을 수행하는 방법을 알고 있습니까?
감사 구글! 그것은 트릭을했다. –