wcf HTTP 终止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wcf HTTP 终止相关的知识,希望对你有一定的参考价值。

接收对 http://?????/???.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志。 服务是用IIS托管的,绑定协议是 WSHttpBinding。

参考技术A 应该有如下可能:1.地址配置错误,更新一下服务引用。2.配置文件出错,看看WSHttpBinding绑定协议是否出错。3.服务未启动,有可能是你的WCF的服务未启动。

使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止

【中文标题】使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止【英文标题】:WCF configuration for webHttpBinding with SSL terminated at load balancer 【发布时间】:2015-02-11 12:39:38 【问题描述】:

我有一个使用 webHttpBinding 的 WCF REST 服务,但在 F5 负载平衡器后面的测试环境中运行它时遇到了一些问题 - 至少我认为负载平衡器是个问题。

该服务已被证明可以使用 http 或 https 在本地运行和操作(“在我的机器上运行”)。该服务托管在使用它的同一站点中。

我们的测试环境位于 F5 负载平衡器后面,该负载平衡器终止 SSL 并通过 http 将请求转发到服务器。我们的 IT 人员表示测试环境的所有传入流量都是 http,并维护该站点在 IIS 中配置了 http 和 https 绑定。我的本地机器和测试环境之间唯一明显的区别是我的本地机器是 IIS 8,而测试环境是 IIS 7.5。

路由是这样注册的:

RouteTable.Routes.Add(new ServiceRoute("REST/stuff", new WebServiceHostFactory(), typeof(StuffService)));

目前,这是在本地工作的相关配置:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
      <security mode="Transport"/>
    </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>
<bindings>
  <webHttpBinding>
    <binding>
      <security mode="Transport"/>
    </binding>
  </webHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

最初,该服务部署到没有 SSL 的测试环境,我在访问使用该服务的页面时收到此错误:

混合内容:“https://foo.bar.com/thing.aspx”处的页面通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“http://foo.bar.com/REST/stuff/”。此请求已被阻止;内容必须通过 HTTPS 提供。

现在对我来说这似乎很神秘,因为该站点是通过 https 访问的,并且对该服务的调用使用的是相对 URL。不幸的是,我现在无法调试,因为我更改了配置。

在收到上述错误时,我并不了解 F5,并认为我需要做的就是将我的服务配置为使用传输安全性,如上述配置。更改配置以使用传输安全后,服务无法在测试环境中激活,在服务器上引发此错误:

由于编译期间出现异常,无法激活服务“/REST/stuff”。异常消息是:找不到与具有绑定 WebHttpBinding 的端点的方案 https 匹配的基地址。注册的基地址方案是 [http]。

我相信,这表明该服务希望使用 https 运行,但注册的基地址方案中缺少 https 阻止了这一点,因此该服务根本无法初始化。我知道当 IIS 中缺少 https 绑定时,可能会发生这种情况(尽管 IT 认为它没有)。

我不确定我还能做些什么来启用我的用例。非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

我的配置很好。出于某种原因,当通过负载均衡器进行交互时,客户端在使用相对 URI 调用服务时没有使用 https。更多关于我认为是我的问题的信息:How to use HTTPS in AngularJS

【讨论】:

以上是关于wcf HTTP 终止的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止

客户端断开连接后,WCF操作未运行

怎样终止HTTP请求

是否可以在 Istio 网关上启用带有 TLS 终止的 HTTP/2?

来自具有早期 SSL 终止的浏览器的 HTTP2

使用 nginx 终止 grpc 流量