部署WCF - 需要在SSL站点上设置主机头

时间:2011-07-13 04:37:49

标签: wcf iis-7 ssl appcmd hostheaders

使用Visual Studio 2010 / .NET 4.0

我已经在这里工作了好几个小时,但我会尝试具体。

我正在向IIS 7部署WCF 4.0服务。它在http下工作正常。我可以针对WCF服务从Visual Studio添加服务引用,并且对它没有任何问题。

当然问题是该服务需要在https下运行。

我设法对web.config文件进行处理,因此它将在https下运行(至少我可以在浏览器中看到.svc和?wsdl)。

但当然IIS正在返回整个wsdl的机器名,而不是域名。

因此,当我尝试添加服务引用时,我会得到类似的结果。

该文件已被理解,但无法处理。    - WSDL文档包含无法解析的链接。    - 下载'https://machinename/MyServiceName.svc?xsd = xsd0'时出错。    - 无法解析远程名称:'machinename'

我知道问题是IIS没有返回主机头,所以WCF正在猜测并回收机器名。

当然,IIS7不允许我向使用SSL的站点添加主机头。我用Google搜索并看到其他人使用像这样的appcmd设置主机标题

appcmd set site /site.name:/+bindings.[protocol='https',bindingInformation='*:443:']

尝试过,它告诉我该网站已被修改

但是,我没有修改现有的SSL绑定,而是获得了一个附加绑定,该绑定具有主机名,但没有附加证书。任何通过IIS UI选择SSL的尝试都会清除主机名。我正在使用GoDaddy的通配符证书

1)有人用appcmd看到这个问题吗?对如何解决有任何想法。 2)我可以在webconfig中设置域名。到目前为止,我所做的所有尝试都产生了各种IIS Yellow Screens of Death,抱怨一个或另一个参数。我提供了一份供您娱乐和建议的副本。

                                                                                         

<services>
  <service name ="NameThisService" behaviorConfiguration="TheDefaultBehaviour">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="webBinding" contract="IService" >
    </endpoint>


  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="webBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings >


<behaviors>
  <serviceBehaviors>
    <behavior name="TheDefaultBehaviour">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpsGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>

    </behavior>
  </serviceBehaviors>
</behaviors>




<serviceHostingEnvironment multipleSiteBindingsEnabled="false"/>

       

1 个答案:

答案 0 :(得分:0)

如果命令行不起作用,您可以在UI中执行此操作。您需要使用证书的友好名称。链接如下。

http://blog.armgasys.com/?p=80