0

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

为了进一步设置场景,每个 WebMethod 创建 HttpWebRequest 以与其他主机通信。

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

  • [ThreadStatic] 静态 int requestId

  • Thread.GetDataThread.SetData存储每个线程的请求 ID。

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

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

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

4

1 回答 1

1

不要尝试保存“状态”,即使您成功了,当您想要使用多个服务器时,此解决方案也不会扩展。

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

Guid.NewGuid()

并将其用作 ID。

于 2013-01-25T16:55:08.597 回答