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

时间:2013-06-22 03:38:08

标签: c# wcf iis-7 web-config

Windows 2008上的IIS 7.0

来自VS 2010的WCF Web服务,.NET 4

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

namespace MyNameSpace
{

    [ServiceContract]
    public interface WebInterface
    {

        [OperationContract]
        [WebGet]
        string GetVersion();

尝试通过HTTP://进行连接,一切正常!

尝试通过HTTPS进行连接://我找不到404文件。

我可以访问通用的“您已经创建了一个Web服务...”页面,包括在HTTP和HTTPS上浏览到完全相同的URL时的完整Web服务路径和C#通用示例代码。

在C#中,我已经读过证书可能会导致问题,我已经实现了委托重载来批准我们的服务器证书。

我怀疑Web.config文件中缺少一个或多个条目,但我不知道从哪里开始。我尝试了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>

请帮助。

1 个答案:

答案 0 :(得分:1)

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

<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 with Transport Security(示例代码所基于的内容)。

您还可以使用“BasicHttpBinding WCF SSL”这样的术语进行谷歌搜索 - 网上有很多示例和信息,只需要使用正确的词语:)

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

也可能存在其他问题(例如如何在您的计算机上设置IIS),但以上是配置所需的内容。