大家好!
我在我的应用中启用了跟踪侦听来跟踪肥皂消息 看看这个:http://msdn.microsoft.com/en-us/library/ms732023.aspx
我的应用是网络.net服务的客户 所以现在我可以在svclog中收集信息了,好吧!
但是如何从中提取肥皂信息呢?
在日志中,肥皂信息以这种形式写成:
...
System.Net详细:0:[5344]来自ConnectStream的数据#53182860 ::写入
System.Net详细:0:[5344] 00000000:3C 3F 78 6D 6C 20 76 65-72 73 69 6F 6E 3D 22 31:
System.Net详细:0:[5344] 00000010:2E 30 22 20 65 6E 63 6F-64 69 6E 67 3D 22 75 74:.0“encoding =”ut
System.Net详细:0:[5344] 00000020:66 2D 38 22 3F 3E 3C 73-6F 61 70 3A 45 6E 76 65:f-8“?>
System.Net详细:0:[5344] 00000030:6C 6F 70 65 20 78 6D 6C-6E 73 3A 73 6F 61 70 3D:lope xmlns:soap =
System.Net详细:0:[5344] 00000040:22 68 74 74 70 3A 2F 2F-73 63 68 65 6D 61 73 2E:“http:// schemas。
System.Net详细:0:[5344] 00000050:78 6D 6C 73 6F 61 70 2E-6F 72 67 2F 73 6F 61 70:xmlsoap.org/soap
System.Net详细:0:[5344] 00000060:2F 65 6E 76 65 6C 6F 70-65 2F 22 20 78 6D 6C 6E:/ envelope /“xmln
System.Net详细:0:[5344] 00000070:73 3A 73 6F 61 70 65 6E-63 3D 22 68 74 74 70 3A:s:soapenc =“http:
System.Net详细:0:[5344] 00000080:2F 2F 73 63 68 65 6D 61-73 2E 78 6D 6C 73 6F 61://schemas.xmlsoa
System.Net详细:0:[5344] 00000090:70 2E 6F 72 67 2F 73 6F-61 70 2F 65 6E 63 6F 64:p.org/soap/encod
System.Net详细:0:[5344] 000000A0:69 6E 67 2F 22 20 78 6D-6C 6E 73 3A 74 6E 73 3D:ing /“xmlns:tns =
...
有一种方法可以从svclog文件中提取它们吗? 我无法修改代码,因此跟踪此内容的配置方式是我首选的解决方案。
谢谢! 南多
答案 0 :(得分:1)
<?xmlversion="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add
type="MySoapExtensionLib.MyExtension, MySoapExtensionLib"
priority="1"
group="High" />
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>here
根据我的需要:
记录SoapMessages的最佳方法是使用自定义SoapException创建备用SoapExceptionLib类库项目。 如果您编写自己的SoapException(在此示例中我们在MySoapExtensionLib库项目中声明了MyExtension),您可以使用配置在项目中启用它(因此对于您将要执行的所有Web服务调用)。 如果您只想要一些Web服务调用来使用您的扩展,则应使用属性。
在CodeProject中查看此项目有一个工作示例:
http://www.codeproject.com/KB/webservices/Soap_Extension_Progress.aspx
希望这有帮助。
再见,
南多
答案 1 :(得分:0)
如果这是使用“添加服务引用”创建的客户端,则可以配置message tracing。这将以XML格式显示消息。
答案 2 :(得分:0)
我在几个月前使用过这段代码,但我不记得我在哪里找到它。 毕竟,它可以解决问题,但不是一个优雅的解决方案。
再见,Nando
...
//call the web service method
var myResponseData = ws.CallMyWebServiceMethod(myRequestData)
//call this method just after the web servcice method call, or it will not work!
DiagnoseResponseProblem();
...
private void DiagnoseResponseProblem()
{
HttpContext hc = HttpContext.Current;
string SoapResponse = null;
string SoapRequest = null;
// Post processing debugging pull out the actual soap message and debug it.
if (hc != null)
{
SoapRequest = hc.Items["SOAPRequest"].ToString();
SoapResponse = hc.Items["SOAPResponse"].ToString();
}
else
{
try
{
SoapResponse = System.Runtime.Remoting.Messaging.CallContext.GetData("SOAPResponse").ToString();
SoapRequest = System.Runtime.Remoting.Messaging.CallContext.GetData("SOAPRequest").ToString();
System.Runtime.Remoting.Messaging.CallContext.FreeNamedDataSlot("SOAPResponse");
System.Runtime.Remoting.Messaging.CallContext.FreeNamedDataSlot("SOAPRequest");
//NANDO: saving SOAP messages
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(SoapRequest);
xmlDoc.Save(@"C:\temp\soap-request.xml");
xmlDoc = new XmlDocument();
xmlDoc.LoadXml(SoapResponse);
xmlDoc.Save(@"C:\temp\soap-response.xml");
}
// Ignore...most likely this system does not
// have the remote message context setup.
catch (Exception ex)
{
//...
}
}
}