在.NET中定义Web服务调用之间不共享的变量

在.NET中定义Web服务调用之间不共享的变量,.net,web-services,global-variables,static-variables,.net,Web Services,Global Variables,Static Variables,我需要一些方法在.NET中定义一个静态变量,而不是在Web服务调用之间共享 我有一些web方法可以接收“用户名”(字符串)和密码。在对用户进行身份验证之后,我想使用“某个全局变量”,在需要时可以使用该“用户名”进行查询。我不能使用静态变量,因为静态变量在webmethods调用之间共享,并且我需要在webservice调用之间不共享这个全局变量(因为它们可以由不同的用户调用,我需要执行方法的每个差异)。我还认为使用带有[thread id,username(string)]的静态字典,但是dif

我需要一些方法在.NET中定义一个静态变量,而不是在Web服务调用之间共享

我有一些web方法可以接收“用户名”(字符串)和密码。在对用户进行身份验证之后,我想使用“某个全局变量”,在需要时可以使用该“用户名”进行查询。我不能使用静态变量,因为静态变量在webmethods调用之间共享,并且我需要在webservice调用之间不共享这个全局变量(因为它们可以由不同的用户调用,我需要执行方法的每个差异)。我还认为使用带有[thread id,username(string)]的静态字典,但是difents调用之间的线程id是相同的

那么,您知道如何定义Web服务调用之间不共享的全局变量(或静态变量)吗


非常感谢。

如果我理解正确,您需要在当前会话中共享状态。如果是这样,您可以使用HttpContext.Current.Session集合,但需要将其添加到web.config

<configuration>
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    </system.serviceModel>
</configuration>

如何手动实施会话管理

假设您在对第一个请求进行身份验证后向客户端发送一个唯一的会话ID

之后,客户机需要在每次调用服务方法时通过向每个方法添加新参数或使用新的请求头传递此ID


通过这种方式,可以很容易地在静态字典中实现会话变量,如您上面提到的,它是此会话ID的密钥。

HttpContext.Current.session为null(web服务未进行身份验证),因此我无法使用session.add。我需要一些方法来定义全局变量(static)之类的东西,这些东西不能在对这个web服务的调用之间共享,或者需要一种方法来识别一个对web服务的调用与另一个调用(一些ID、令牌等等),创建一个带有这个ID变量的静态字典来读取我看到的“Variable”,因此,这说明您没有在IIS中托管此Web服务。