C# 记录整个SOAP请求还是只记录其中的参数?
我有一个同步应用程序,它每10秒向web服务发送一次请求,并在本地数据库中进行一些数据转换,反之亦然。为了方便和解决一些争议,我想记录任何一对请求和响应SOAP消息 但我的经验告诉我,用同样的请求和响应填充SQLite数据库需要很大的空间 如何用更少的磁盘空间实现相同级别的日志详细化? 事实上,记录整个消息有好处吗?也许我们可以剪切参数值并记录它,而不是完整的消息 也许还有另一种机制可以压缩消息(或者扩展/获取包含部分数据的完整消息?)并存储较少的数据,但能够在需要的地方获取源消息 样本: 请求:C# 记录整个SOAP请求还是只记录其中的参数?,c#,.net,wcf,sqlite,logging,C#,.net,Wcf,Sqlite,Logging,我有一个同步应用程序,它每10秒向web服务发送一次请求,并在本地数据库中进行一些数据转换,反之亦然。为了方便和解决一些争议,我想记录任何一对请求和响应SOAP消息 但我的经验告诉我,用同样的请求和响应填充SQLite数据库需要很大的空间 如何用更少的磁盘空间实现相同级别的日志详细化? 事实上,记录整个消息有好处吗?也许我们可以剪切参数值并记录它,而不是完整的消息 也许还有另一种机制可以压缩消息(或者扩展/获取包含部分数据的完整消息?)并存储较少的数据,但能够在需要的地方获取源消息 样本: 请求
abcdef
答复:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetModifiedItemsResponse xmlns="http://tempuri.org/">
<GetModifiedItemsResult xmlns:a="http://schemas.datacontract.org/2004/07/Exchange" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Body i:type="a:lst">
<a:List>
<a:BaseItem i:type="a:asd">
<a:ISDELETED i:nil="true"/>
<a:ID>1</a:ID>
<a:SYSUSER>b2</a:SYSUSER>
</a:BaseItem>
<a:BaseItem i:type="a:asd">
<a:ISDELETED i:nil="true"/>
<a:ID>2</a:ID>
<a:SYSUSER>b3</a:SYSUSER>
</a:BaseItem>
</a:List>
</a:Body>
<a:Msg>SUCCESS</a:Msg>
</GetModifiedItemsResult>
</GetModifiedItemsResponse>
</s:Body>
</s:Envelope>
1.
b2
2.
b3
成功
好的。将WCF设置为记录所有内容非常简单。给出了一个例子。您想要使用IMessageInspector接口
至于问题的第二部分。使用大量的数据存储。我有两个答案给你。您将使用大量的数据存储,因为
现在,至于您是应该从XML中提取数据,还是以不兼容的格式存储数据……我认为这会适得其反。通过存储实际请求,您可以编写一个小应用程序,将请求重新发送到回归测试。在我看来,解决方案取决于您是要存储整个消息还是只跟踪呼叫和一些其他数据 如果您不必存储整个消息,我绝对建议您安装。AppFabric是一组集成的技术,可以更轻松地执行许多操作,包括监视IIS上托管的WCF服务,而且是免费的!。AppFabric的设置非常简单,可以为IIS添加新的功能/图标 我们在生产环境中使用AppFabric+SQL Server Express来跟踪一些WCF调用。启用跟踪非常简单;您可以设置跟踪级别、目标数据库、要保留多少历史记录、大小限制等等……此外,还有一个非常酷的用户界面,可以让您查询存储的所有跟踪(它显示跟踪了多少调用、失败了多少……)。好的是,在出现错误调用的情况下,您可能会有错误描述。也可以在AppFabric跟踪中添加用户定义的数据。更多信息 现在,如果您需要存储整个消息,正如@Aron所说,我会选择使用NoSQL,尤其是使用。 如其网站上所述: logstash是一种用于管理事件和日志的工具。你可以用它来 收集日志,解析它们,并将它们存储起来以备将来使用(例如 搜索)。说到搜索,logstash附带了一个web界面 用于搜索和钻取所有日志 logstash基于elasticsearch 最后一件事是定义存储消息的正确时间/地点,可能是使用自定义WCF行为
希望有帮助 压缩XML最简单的方法是一次存储多个文档,并对其应用您选择的任何通用压缩算法。关键是一次压缩多条消息,以便压缩器可以利用重复XML结构中存在的极端冗余 这工作得非常好,因此通常不需要专门的XML压缩。像“gzip/deflate”这样的普通算法或像LZMA(7zip)这样更强大的算法非常非常擅长利用这一点。它们所做的就是组合重复的子字符串(就像它们在XML中一样)
因此,您可以将所有XML消息缓冲10秒钟,并将它们保存在某个二进制blob中。日志有两个主要用途:
祝你好运。希望这有帮助NoSQL看起来不错。但我可以将其用作非客户机-服务器工具吗?我选择SQLite是因为我
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetModifiedItemsResponse xmlns="http://tempuri.org/">
<GetModifiedItemsResult xmlns:a="http://schemas.datacontract.org/2004/07/Exchange" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Body i:type="a:lst">
<a:List>
<a:BaseItem i:type="a:asd">
<a:ISDELETED i:nil="true"/>
<a:ID>1</a:ID>
<a:SYSUSER>b2</a:SYSUSER>
</a:BaseItem>
<a:BaseItem i:type="a:asd">
<a:ISDELETED i:nil="true"/>
<a:ID>2</a:ID>
<a:SYSUSER>b3</a:SYSUSER>
</a:BaseItem>
</a:List>
</a:Body>
<a:Msg>SUCCESS</a:Msg>
</GetModifiedItemsResult>
</GetModifiedItemsResponse>
</s:Body>
</s:Envelope>