WebService根据WebMethod请求记录唯一ID

时间:2013-01-25 16:32:46

标签: .net web-services asynchronous asmx webmethod

我正在将一个日志系统添加到作为Windows服务运行的.Net ASMX WebService中。 目的是将每个调用记录到不同请求ID下的WebMethod,以便能够在日志中识别为特定请求创建的所有条目。

为了更多地设置场景,每个WebMethod创建HttpWebRequest以与其他主机通信。

在第一次尝试解决问题时,我使用以下方法存储每个线程的请求ID:

  • [ThreadStatic] static int requestId

  • Thread.GetData Thread.SetData ,用于存储每个帖子的请求ID。

但是我很快意识到请求是交换线程,这不可靠。

我最后尝试使用 HttpContext.Current.Items 来存储每个WebMethod请求的请求ID,但这并不完全可靠,因为HttpContext.Current.Items有时可能为空。

进一步调查我认为这可能是由于在WebMethod中发送了HttpWebRequest,我之所以认为这是因为HttpWebRequest中发生的异步调用可能会丢失原始的HttpContext,因此会丢失它。

1 个答案:

答案 0 :(得分:1)

请勿尝试保存“状态”,即使您成功,当您想要使用多台服务器时,此解决方案也无法扩展。

您可以为每个请求生成GUID。

Guid.NewGuid()

并将其用作身份证。