【问题标题】:Use Port 443 for both self hosted wcf service and IIS at the same time同时为自托管 wcf 服务和 IIS 使用端口 443
【发布时间】:2013-01-09 17:15:30
【问题描述】:

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

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

【问题讨论】:

  • 你在做什么类型的绑定? HTTP 还是 net.tcp?
  • Http,webHttpBinding 和 basicHttpBinding 的混合体。
  • 您是否有理由必须将 443 用于您的 wcf 端口?您可以使用未使用的端口吗?例如8081
  • 我有两个顾虑。首先是是否所有客户端机器都能够访问除 80 和 443 以外的端口。其次是这些 WCF 服务已经在另一台服务器上处于活动状态,因此我正在尝试迁移而无需更新客户端机器。

标签: c# wcf iis ssl


【解决方案1】:

经过大量研究,我能够确定其中一个服务端点,一个设置为模拟 crossdomain.xml 文件的 REST 端点正在抢占 IIS。否则一切都按预期工作。我放弃了那个端点,改用 IIS 来提供文件。

【讨论】:

    【解决方案2】:

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

    请注意,虽然您可以在端口 80 上运行多个域,但如果我没记错的话,您只能在端口 443 上使用一个域,因此主机标头等内容不适用于 HTTPS 连接。这也可能导致您的问题。

    有什么方法可以改为通过 IIS 托管自托管服务?这可能会解决这个问题并减少您将来的管理负担。

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

    【讨论】:

    • 在 IIS 中托管并非完全不可能,但我在我的服务中使用了无扩展的 URL 端点,例如/LS客户端。如果我使用 IIS,我将不得不使用 /LSClient.svc,这将迫使我更新客户端代码以反映新的绑定。这很重要,因为我不控制客户端。
    • 另外,我相信端口 443 限制是每个 ip/端口组合一个应用程序。甚至可以通过手动更新 IIS 配置来解析主机头来解决这个问题。
    • @GrantH :如果您使用 webapi,那么您将不会依赖 .svc 文件并且可以获得无扩展名的 url
    • @Rajesh,是的,但这需要新的绑定,这意味着客户端更新。
    猜你喜欢
    • 2022-12-13
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多