Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 记录来自控制台应用程序的SOAP消息_C#_Logging_Console Application_Soap Client - Fatal编程技术网

C# 记录来自控制台应用程序的SOAP消息

C# 记录来自控制台应用程序的SOAP消息,c#,logging,console-application,soap-client,C#,Logging,Console Application,Soap Client,为了审计目的,我正在尝试将我开发的控制台应用程序和特定的第三方远程SOAPWeb服务之间的请求和响应(原始XMLSOAP信封)记录到数据库中,但我找不到方法 理想情况下,我想做的是得到请求 阿尔比雷奥 以及回应 你好,阿尔比里奥。 并保存在数据库中 到目前为止,我在网上找到的每个教程都归结为两种方法,SoapExtension方法和tracing方法 SoapExtension方法 SoapExtension方法基于指南,在该方法中,您创建一个继承自SoapExtension的类,并将其

为了审计目的,我正在尝试将我开发的控制台应用程序和特定的第三方远程SOAPWeb服务之间的请求和响应(原始XMLSOAP信封)记录到数据库中,但我找不到方法

理想情况下,我想做的是得到请求


阿尔比雷奥
以及回应


你好,阿尔比里奥。
并保存在数据库中

到目前为止,我在网上找到的每个教程都归结为两种方法,SoapExtension方法和tracing方法

SoapExtension方法 SoapExtension方法基于指南,在该方法中,您创建一个继承自SoapExtension的类,并将其挂接到应用程序的配置中,该类的ProcessMessage方法将允许您截获SOAP消息

这是从SoapExtension继承的类的一个示例:

namespace.Client
{
使用制度;
使用System.Web.Services.Protocols;
公共类SoapLogger:SoapExtension
{
公共重写对象GetInitializer(System.Type serviceType)
{
抛出新的NotImplementedException();
}
公共重写对象GetInitializer(LogicalMethodInfo methodInfo,SoapExtensionAttribute属性)
{
抛出新的NotImplementedException();
}
公共重写无效初始化(对象初始值设定项)
{
抛出新的NotImplementedException();
}
公共覆盖无效ProcessMessage(SoapMessage消息)
{
抛出新的NotImplementedException();
}
}
}
这就是它在配置中的接线方式:


指南,在此方法中,您可以为应用程序中的每个SOAP/WCF通信启用.NET跟踪,并将日志转储到某个位置(有关配置的更多信息,请参阅)

这是跟踪配置的一个示例:


因为它太大了,不能放在这里

这种方法的问题是它记录了应用程序中的每个SOAP/WCF消息,而且生成的日志似乎不是真正有用的,它们包含大量信息,我无法理解是否以及如何只过滤我感兴趣的内容,阅读它们的唯一实用方法似乎是Microsoft的

我也尝试添加自定义TraceListener:

namespace.Client
{
使用制度;
使用系统诊断;
使用System.IO;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
公共类CustomTraceListener:TraceListener
{
公共重写无效写入(字符串消息)
{
AppendAllLines(“CustomTraceListener.txt”,新[]{message});
}
公共覆盖无效写线(字符串消息)
{
message=this.FormatXml(message);
AppendAllLines(“CustomTraceListener.txt”,新[]{message});
}
私有字符串格式XML(字符串消息)
{
使用(var stringWriter=new stringWriter())
{
var xmlWriterSettings=新的xmlWriterSettings();
xmlWriterSettings.Encoding=Encoding.UTF8;
xmlWriterSettings.Indent=true;
xmlWriterSettings.OmitXmlDeclaration=true;
使用(var xmlTextWriter=XmlWriter.Create(stringWriter,xmlWriterSettings))
{
XDocument.Parse(message.Save)(xmlTextWriter);
}
返回Convert.ToString(stringWriter);
}
}
}
}
但即使它允许我拦截消息,它也不会保存任何元数据:


邮递
UIDPO4BOSUSXLSVEKMFO4AP2PSAAAAAALEIONTO3EWKGCNIGRYJP9F3WBRLP+ROhY9Oy6bed/cACQAA
http://tempuri.org/IGreeterService/SayHello
80101cc1-dfb5-4c8e-8d19-ec848ab69100
阿尔比雷奥
http://tempuri.org/IGreeterService/SayHello
http://localhost:8080/greeter
邮递
UIDPO4BOSUSXLSVEKMFO4AP2PSAAAAAALEIONTO3EWKGCNIGRYJP9F3WBRLP+ROhY9Oy6bed/cACQAA
80101cc1-dfb5-4c8e-8d19-ec848ab69100
阿尔比雷奥
有了这些信息,就不可能重建请求/响应流,因为所有消息都混合在一起了

将它们与本机XmlWriterTraceListener生成的*.svclog进行比较:


0
3.
0
8.
ESP-DEV-9
http://tempuri.org/IGreeterService/SayHello
http://localhost:8080/greeter
邮递
UIDPO4BOSUSXLSVEKMFO4AP2PSAAAAAALEIONTO3EWKGCNIGRYJP9F3WBRLP+ROhY9Oy6bed/cACQAA
80101cc1-dfb5-4c8e-8d19-ec848ab69100
阿尔比雷奥
0
3.
0
8.
ESP-DEV-9
好啊
好啊