我有一个使用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维护它不是)。
我不知道我还能做些什么来启用我的用例。非常感谢任何帮助!
答案 0 :(得分:0)
我的配置很好。出于某种原因,当通过负载均衡器进行交互时,客户端在使用相对URI来调用服务时没有使用https。有关我认为是我的问题的更多信息,请访问:How to use HTTPS in AngularJS