我正在记录来自我的应用程序的传出 WCF Soap 请求,并发现我正在记录的内容与实际通过线路发送到服务器的内容之间存在差异。
这是我正在记录的内容:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/myinterface</Action>
</s:Header>
<s:Body>
<myinterface xmlns="http://tempuri.org/">
...
以下是实际输出的内容(使用 WireShark 捕获):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<myinterface xmlns="http://tempuri.org/">
...
您会注意到 WireShark 捕获没有 Header 或 Action 元素。
我只是注意到这一点,因为我尝试通过 SoapUI 推送我记录的请求。
我正在使用此代码记录请求:
public class InspectorBehavior : IEndpointBehavior
{
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new WCFMessageInspector());
}
和:
public class WCFMessageInspector : IClientMessageInspector
{
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
{
Log(request.ToString());
return null;
}
和:
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(address);
client.Endpoint.Behaviors.Add(new InspectorBehavior());
有谁知道是否有一种方法可以准确地捕捉到正在发生的事情(逐字记录),而无需如上所示的任何后处理?