asp.net webservice是否有类似应用程序启动和应用程序变量的东西?

时间:2012-01-29 15:16:50

标签: asp.net web-services asmx

我正在开发一个Web服务,在调用时,将通过tcp连接通知另一个程序。我的问题是在哪里存储open tcp连接。我了解Web服务的方式,它们以每个HTTP请求开始和结束,没有应用程序范围变量的空间,例如open tcp连接。

如果我错了,请纠正我。

具体来说,在asmx文件的哪个部分或其外部,我应该放置用于侦听传入tcp流量的代码吗?

3 个答案:

答案 0 :(得分:2)

Global.asax中的应用程序事件应触发作为IIS中的应用程序托管的Web服务。你可以使用这些。请记住,即使在同一个应用程序中访问了网页而不是Web服务,它们也会触发。

答案 1 :(得分:1)

您可以将tcp连接作为服务类的静态成员放置,并创建一个处理实例化的静态构造函数。

这将在首次访问Web服务之前创建tcp连接,然后只要托管进程正在运行,就会保持连接。这种方法的唯一缺点是tcp连接是进程范围的。如果您在同一进程中托管两个Web服务实例(非常不可能),它们将共享相同的tcp连接。

答案 2 :(得分:1)

幸运的是,你错了。

应用程序范围内的事件可以解决,您可以访问所有asp.net容器,应用程序级变量的Application容器,会话级变量的Session容器(如果客户端) side支持cookie,会话ID甚至可以在cookie中传递)和Items容器用于请求级变量。

但是,这是否有助于你存储额外的tcp监听器(如果我理解的话)是另一个故事,不是很明显。