在asp.net中托管套接字服务 - 与application_start& application_end

时间:2010-12-20 04:00:20

标签: c# asp.net sockets global-asax

我们有一个组件需要坐在asp.net中,在一个众所周知的端口上创建一个侦听套接字。我们拥有套接字的原因是asp.net需要组件需要从外部服务接收事件,而其他技术不够快或不够灵活。

我们在application_start中启动套接字侦听,并在application_end中关闭套接字。问题是如果我们正在接收对网站的http请求,并修改web.config,则在调用application_end之前调用application_start事件,因此我们无法打开套接字(我们收到有关重复套接字打开的错误)。在web.config更改后,我们没有在application_start中引用原始套接字,因此我们无法从那里关闭它。

有解决方法吗?

干杯,

MRT

3 个答案:

答案 0 :(得分:1)

如何在收听之前获取互斥锁,并在收听结束后释放它。这样,如果它仍在侦听前一个套接字,则互斥锁将阻塞,直到前一个套接字被关闭。

答案 1 :(得分:1)

听起来像一个错误的架构。

Application_Start正在Application_End之前执行,因为IIS正在为您启动一个新的AppDomain,并会在启用它之前启动它。如果您根据时间表或多个请求启用应用程序池的回收,它也会执行此操作。

听起来你想要asp.net来做/管理东西。我会尝试构建一个服务,做任何需要做的事情,并更新一个应用程序状态(通常是一个数据库),并让你的asp.net应用程序从中读取,

答案 2 :(得分:0)

从asp.net获取自定义套接字侦听代码。使用Windows服务来托管这个套接字监听器,你可以根据需要或者相反的方式将它调用到asp.net。无论哪种方式,你都可以减少麻烦。