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

问题描述:

我正在开发一个webservice,它会在调用时通过tcp连接通知另一个程序。我的问题是在哪里存储打开的TCP连接。我理解Web服务的方式是,它们以每个HTTP请求开始和结束,没有用于应用程序范围变量的空间,如开放式TCP连接。asp.net webservice是否有类似于应用程序启动和应用程序变量的内容?

如果我错了,请纠正我。

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

+2

您是否知道ASMX是传统技术,不应该用于新开发? – 2012-01-29 15:49:28

+0

我不知道。我使用的是Visual Studio 2008,因为一位MS代表在一天的课堂上发布了它。 Web服务仍然相对较小,我可以使用其他什么? – lowerkey 2012-01-29 16:28:12

+0

另外,你有参考吗? – lowerkey 2012-01-29 16:31:19

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

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

+0

为所有Web服务实例提供一个tcp连接正是我想要的。谢谢你的提示! – lowerkey 2012-01-29 16:29:19

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

幸运的是,你错了。

广泛应用的事件做火,再加上你有访问所有asp.net容器,应用程序级的变量Application容器,用于会话级变量Session容器(如果该客户端支持cookie,会话ID甚至可以通过cookie传递)和Items容器用于请求级变量。

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