【问题标题】:IIS 7.0 Web Service - Works on HTTP (80), Fails with error 404 on HTTPS (443)IIS 7.0 Web 服务 - 在 HTTP (80) 上工作,在 HTTPS (443) 上失败并出现错误 404
【发布时间】:2013-06-22 03:38:08
【问题描述】:

Windows 2008 上的 IIS 7.0

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

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

namespace MyNameSpace
{

    [ServiceContract]
    public interface WebInterface
    {

        [OperationContract]
        [WebGet]
        string GetVersion();

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

尝试通过 HTTPS:// 连接我得到一个 404 文件未找到。

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

在 C# 中,我读到证书可能会造成麻烦,并且我已经实现了委托重载来批准我们的服务器证书。

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

网页配置:

<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 中为您的网站添加了 HTTPS 绑定?

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


【解决方案1】:

您正在使用basicHttpBinding 的默认值,并且该绑定的默认安全模式是无。您需要在配置中定义绑定并将安全模式设置为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”之类的术语在 Google 上搜索 - 网络上有很多示例和信息,只需使用正确的词语即可 :)

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

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

【讨论】:

  • 感谢您的建议,现在我得到以下信息:“客户端发现响应内容类型为 'text/html',但预期为 'text/xml”
  • @BrianJenkins:我也在同一个机器人中。你还记得,你是如何解决这个问题的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
相关资源
最近更新 更多