HTTP连接可以从IIS / ASP.NET传递到另一个应用程序或服务吗?

时间:2010-12-20 21:03:10

标签: asp.net http iis websocket

我正在研究构建一个ASP.NET MVC应用程序,它公开(除了通常的HTML页面)JSON和XML REST服务,以及Web Sockets

在一个完美的世界中,我可以使用与其他服务相同的Web套接字接口的URL(并确定哪些数据由用户代理请求返回),但是,知道IIS不是'为持久连接而构建,我需要知道是否有一种方法可以接受(甚至可能是握手)Web Sockets连接,然后将连接传递给服务器上运行的另一个服务。

如果不可能,我确实有一个解决方法,基本上涉及使用ASP.NET检查Web套接字连接升级标头,并使用HTTP/1.1 302 Found进行响应指向将我的Web套接字服务配置为直接侦听适当端点的其他主机。

4 个答案:

答案 0 :(得分:1)

您可以使用ISAPI_rewrite指向适当的端点(并操纵HTTP标头以获取它),而不是302响应。

http://www.isapirewrite.com/docs/

否则,IIS无法原生地传递HTTP连接。当前的MSFT方法是在发送到IIS(或任何其他应用程序)之前使用302或其他拦截原始套接字并执行标头操作的方法

答案 1 :(得分:1)

如果我完全理解您的目标,我相信您可以使用IIS7 / 7.5应用程序请求路由模块来完成此任务。

以下是快速参考:http://learn.iis.net/page.aspx/489/using-the-application-request-routing-module/

答案 2 :(得分:0)

令我感到震惊的是,问问微软这个问题比问我们更好。 Web套接字是一种新技术,而不是寻找黑客,您可能想问微软他们计划如何支持它。 IIS是他们的软件。点击http://iis.net(可能在http://forums.iis.net),看看你学到了什么。

答案 3 :(得分:0)

执行此操作的方法是使用与Http会话关联的唯一会话ID。从描述中,您可能希望将此范围扩展到单个HttpApplication实例,但这不是必需的(您还可以在多个应用程序实例中保留会话)。无论如何,这个会话ID需要以某种方式附加到每个Http请求(带有cookie,查询字符串,带有HttpApplication实例的静态变量,表单数据)。然后,您将使用ID持久保存有关Http会话的标识信息。

此识别信息可能会根据您的需要而有所不同,但可能需要整个http请求,或者只是一些符合您特定目的的精简代表。

在Http请求中的某处使用此SessionID,您可以恢复需要调用的任何信息并与相应的服务进行交互。服务的实例也可能也需要限定在会话范围内。

基本上,我建议你 NOT 直接将Ht​​tp连接传递给外部进程,而是将必要的数据传递给外部进程,并允许创建一个发送回调数据的机制。我认为调查中介模式可能有助于您理解我的意思。 http://en.wikipedia.org/wiki/Mediator_pattern。我希望这会有所帮助。