IIS 7.0 Web服务-在HTTP(80)上工作,在HTTPS(443)上错误404失败

本文关键字:工作 HTTPS 失败 错误 Web 服务 HTTP IIS | 更新日期: 2023-09-27 18:19:23

IIS 7.0 on Windows 2008

WCF Web Service, .NET 4 from VS 2010

Web服务是通过发布安装的,我在服务器上有完全的管理员权限。有几个复杂的方法,但有一个简单的方法返回构建版本。如果我们能让这个工作,我可以解决他们所有-这是我的界面:

namespace MyNameSpace
{
    [ServiceContract]
    public interface WebInterface
    {
        [OperationContract]
        [WebGet]
        string GetVersion();

尝试通过HTTP://连接,一切工作正常!

尝试通过HTTPS://进行会议,我得到一个404文件未找到。

我可以到达通用的"你已经创建了一个web服务…"页面,包括完整的web服务路径和c#通用样例代码,当浏览到HTTP和HTTPS上完全相同的URL时。

在c#中,我读到证书会引起麻烦,并且我已经实现了委托过载来批准我们的服务器证书。

我怀疑Web中缺少一个或多个条目。配置文件,但我不知道从哪里开始。我试过Google搜索和Stack Overflow搜索,但我没有找到正确的搜索词组合来帮助解决这个特定的问题。

Web配置:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="HttpGetMetadata">
        <serviceDebug includeExceptionDetailInFaults="true"/>
        <serviceMetadata httpGetEnabled="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service name="LinkService" behaviorConfiguration="HttpGetMetadata">
      <endpoint address="" contract="WebInterface" binding="basicHttpBinding" />
    </service>
  </services>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

请帮助。

IIS 7.0 Web服务-在HTTP(80)上工作,在HTTPS(443)上错误404失败

您正在使用basicHttpBinding的默认值,并且该绑定的默认安全模式为None。您需要在配置中定义绑定,并将安全模式设置为Transport。向ServiceModel部分添加一个Bindings部分,如下所示:

<serviceModel>
  <Bindings>
    <basicHttpBinding name="secureBinding">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </basicHttpBinding>
  </Bindings>
</serviceModel>
然后您需要通过bindingConfiguration属性将此绑定分配给端点,如下所示:
<endpoint address="" 
          binding="basicHttpBinding" 
          bindingConfiguration="secureBinding"  
          contract="WebInterface" />

您可能还想启用httpsGetEnabled:

<serviceMetadata httpGetEnabled="true"
                 httpsGetEnabled="true" />

请参阅基于传输安全的BasicBinding(这是示例代码的基础)。

你也可以谷歌的术语,如"BasicHttpBinding WCF SSL"和类似的东西-很多的例子和信息在网上,这只是一个问题,使用正确的词:)

另外,我不是100%确信transportClientCredential设置对于您的场景是正确的(它可能需要是Certificate),但是我对WCF的SSL做了很少的工作。

可能还有其他问题(比如IIS如何在您的机器上设置),但以上是配置所需要的。