我正在将一个日志系统添加到作为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,因此会丢失它。
答案 0 :(得分:1)
请勿尝试保存“状态”,即使您成功,当您想要使用多台服务器时,此解决方案也无法扩展。
您可以为每个请求生成GUID。
Guid.NewGuid()
并将其用作身份证。