2013-06-25 80 views
0

我们有一个由一侧一个WCF Web服务,而在另一侧的智能客户端的解决方案。WCF通过HTTPS - >代理 - > HTTP

通常情况下,我们成立了HTTPS在Web服务器上的web服务,以便客户端和服务器之间的通信发生了HTTPS。

我们的一个客户但是有一个代理服务器之间,从他们的SSL负载条传入HTTPS请求,并转发普通HTTP请求到Web服务器:

客户端> HTTPS>代理> HTTP> Web服务器

问题是我们使用WsHttpBinding来允许我们通过SSL与WCF进行通信。通常,我们在客户端和服务器上使用该绑定,并且没有问题。

但由于Web服务实际收到的HTTP请求,我们不能使用的WSHttpBinding(需要HTTPS)。但是我们必须使用客户端的HTTPS。

当然不过,WCF要求客户机和服务器之间相匹配的绑定。所以,我们有点卡住,我不能找到解决这个问题的好办法:

  • 我们不能将客户端设置为使用HTTP出于安全原因
  • 我们可以设置服务接受HTTP请求,但客户端将无法与之通信。

有一定的设置,可以覆盖这个要求?

+0

您是如何确保请求到达Web服务器的,并且它没有HTTPS但HTTP?当你说智能客户端时,它是什么?一个浏览器或其他东西? – Anu

+0

那么,我可以看到Web服务器通过HTTP进入的请求,我还可以在WCF日志中看到报告错误的URL,即HTTP。此外,代理服务器的人确认HTTPS被剥离为HTTP并通过HTTP转发到网络服务器。智能客户端是使用ClickOnce部署的.NET Windows窗体应用程序。所以它是连接到WCF服务的Windows窗体应用程序。 – Aaron

回答

0

使用wcf binding converter获得自定义您的wsHttpBinding绑定。然后将自定义绑定从https更改为http元素。

+0

谢谢,我会在尝试完成后给您反馈。已经有一些问题:我是否在客户端和服务上使用这种自定义绑定?然后,我将客户端设置为HTTPS并将服务设置为HTTP? (似乎可能不起作用)。我无法将客户端设置为HTTP,因为它们拒绝传入的HTTP连接,另外我认为我的自定义用户名/密码将可读(使用带有自定义成员资格提供程序的用户名凭证类型)。 – Aaron

+0

仅在服务中使用它,因为客户端已经很好。客户端保留https和服务http。这将工作,因为你有一个在卸载SSL的中间服务。 –

+0

它现在抱怨说:“合同被配置为需要传输级别完整性和机密性的身份验证模式,但传输不能提供完整性和机密性。”这是因为身份验证模式为UserNameOverTransport。我不确定我可以使用哪个其他选项,因为在客户端我们使用UserName身份验证(http://msdn.microsoft.com/zh-cn/library/aa751836.aspx)。 – Aaron