我正在开发一个Web服务,在调用时,将通过tcp连接通知另一个程序。我的问题是在哪里存储open tcp连接。我了解Web服务的方式,它们以每个HTTP请求开始和结束,没有应用程序范围变量的空间,例如open tcp连接。
如果我错了,请纠正我。
具体来说,在asmx文件的哪个部分或其外部,我应该放置用于侦听传入tcp流量的代码吗?
答案 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监听器(如果我理解的话)是另一个故事,不是很明显。