同时使用端口443进行自托管wcf服务和IIS

时间:2013-01-09 17:15:30

标签: c# wcf iis ssl

我有一个自托管的WCF服务,以及一个需要在同一台机器上运行的ASP .Net网站。我发现当自托管服务正在运行时,所有针对IIS的端口443的调用(基于IP和主机头/ SSL绑定)都会被路由到WCF体系结构,因此网站就会自动停止工作托管服务正在运行。它有效地阻止了IIS完成工作的能力。

请注意,IIS仍可在其他端口上正常工作,例如端口80.它只是在端口443上过于急切。不完全确定这是服务器问题还是代码/ wcf问题。

2 个答案:

答案 0 :(得分:2)

经过相当多的研究,我能够确定其中一个服务端点,一个设置为模拟crossdomain.xml文件的REST端点正在抢占IIS。否则一切都按预期工作。我抛弃了那个端点并使用IIS来代替服务该文件。

答案 1 :(得分:-1)

听起来,正如您所怀疑的那样,自托管服务在IIS可以接收之前拦截对端口443的调用。快速检查IIS日志应确认这是否正在发生。

请注意,尽管您可以在端口80上运行多个域,但如果我没记错,您只能在端口443上使用一个域,因此主机头之类的东西不能与HTTPS连接一起使用。这也可能导致您的问题。

您是否有办法通过IIS托管自托管服务?这可能会解决这个问题,并减少您将来的行政负担。

编辑以下评论: 如果你不能在IIS中托管,那么假设我是正确的,WCF服务正在拦截IIS的请求,这是阻止流量通过的原因,那么你可能需要向WCF应用程序添加一些内容或创建(或找到一个现有的例子)基于HttpListener的传入流量的独立代理,并使用它来识别正在寻找的服务请求并适当地中继它。当然,这种类型的代理服务也可以用于掩盖扩展,以便您可以使用它来将任何格式的外部URL转发到适当的内部服务URL。重要的是代理位于网络堆栈中的WCF和IIS之前,因此它可以拦截请求,然后才能获取它们。如果你自己编写,那么HttpListener可能是一个很好的起点。