将信息从SoapExtension传递给WebMethod

时间:2011-04-26 17:42:50

标签: .net asp.net web-services asmx

我目前有一大堆ASMX Web服务,通​​过将它们序列化为xml并将该xml存储在我的数据库中来记录传入和传出对象。日志记录过程发生在Web方法本身。(我知道。我知道。我应该使用WCF,我正试图把球推到山上,但我的组织老了又慢了)

我宁愿只使用Soap扩展并记录它们发送的整个SOAP消息以及我返回的整个SOAP消息,而不是序列化对象。使用Microsoft's example作为基础,我的工作很棒。我的问题是,当我将SOAP请求记录到数据库时,我生成一个与该请求匹配的唯一键,可用于在数据库中查找请求。我想将该密钥传递给我的Web方法,以便它可以用于记录与请求相对应的其他信息(错误,指标等)。但是,我无法找到一种方法来获取Web方法的密钥,以便Web方法可以在数据库中存储有关请求的其他信息。

这是可能的,如果可行,最好的方法是什么?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您应该使用CorrelationManager类来查看日志记录。您将在请求的SoapExtension中启动逻辑操作,并在相应的回复上停止它。然后,您的日志应显示与回复请求的完全匹配,包括您要记录的其他信息。

唯一ID(GUID)将以Trace.CorrelationManager.ActivityId的形式提供。

答案 1 :(得分:0)

为什么不只是有一个全局标志(或更复杂的东西来防止多线程问题),在服务器端soap扩展中将其设置为当前请求ID并在服务器端方法中读取它?