繁体   English   中英

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

[英]Can an HTTP connection be passed from IIS/ASP.NET to another application or service?

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

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

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

您可以使用ISAPI_rewrite而不是302响应将其定向到适当的端点(并操作HTTP标头以使其到达该端点)

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

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

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

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

令我惊讶的是,问微软比问我们是一个更好的问题。 Web套接字是一项新技术,您可能不想问微软黑客,而是想问微软他们打算如何支持它。 IIS是他们的软件。 http://iis.net (也许在http://forums.iis.net )中四处浏览,然后看看您学到了什么。

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

此标识信息可能会因您的需要而异,但可能需要整个http请求或仅一些满足您特定目的的简化表示形式。

在Http请求中的某处使用此SessionID,可以恢复调用和与适当的服务进行交互所需的任何信息。 服务的实例也可能还需要限制在会话范围内。

基本上,我建议您不要将Http连接直接传递给外部进程,而是将必要的数据传递给外部进程,并允许创建一种发送回调数据的机制。 我认为研究调解员模式可能有助于您理解我的意思。 http://en.wikipedia.org/wiki/Mediator_pattern 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM