Wcf Http和Https

时间:2011-02-07 11:43:10

标签: wcf http iis-7 https

请帮助!!

我完成了以下设置: -

  1. 在本地IIS 7上的网站中托管的WCF服务库

  2. 使用上述服务在本地IIS 7上的网站上的Silverlight应用程序

  3. 我写的解决方案是内联网而不是互联网使用,但我的老板告诉我,它需要超过Https。我正在使用Windows身份验证。

    以下是其中一个服务端点的配置文件的一部分(更改为删除公司信息等): -

        

    <services>
      <service behaviorConfiguration="stdHttpBehavior" name="WcfServiceLibrary.StaticDataService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="windowsHttpBinding"
          name="StaticDataService" contract="WcfServiceLibrary.ServiceContracts.IStaticDataService" />
        <endpoint address="mex" binding="mexHttpBinding" name="" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/WcfServiceLibrary/StaticDataService/" />
          </baseAddresses>
        </host>
      </service>
    

                                                                                

    <behaviors>
      <serviceBehaviors>
        <behavior name="stdHttpBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

    为了试验Https,我创建了一个“自签名证书”。然后,我将https添加到默认网站绑定,并将两个网站更改为需要SSL,还更改了配置文件中的relvant URI。我设法让这个工作,但现在我想回到标准的Http并在该模式下完成项目,因为它更容易使用。我更改了所有设置(我非常仔细地检查了这些设置)。

    现在,如果我尝试在Silverlight项目中下载Service定义,我会收到此错误: -

    '无法找到与绑定BasicHttpBinding的端点匹配方案https的基址。注册的基地址方案是[http]。'

    如果我在IIS中放回证书和绑定。服务定义似乎下载确定,但是它引用了https URI,因此实际的服务调用都不起作用,因为它们是http地址!

    我尝试添加新网站来托管服务,但却遇到了同样的错误。

    过去几天我一直试图解决这个问题,但找不到答案。好像有一个隐藏的引用,而不是在我的项目中,因为它继续添加到IIS的新网站。

2 个答案:

答案 0 :(得分:2)

看起来很明显,但您windowsHttpBinding绑定配置上的安全模式更改为BasicHttpSecurityMode.None吗?

<bindings>
  <basicHttpBinding>
    <binding name="windowsHttpBinding">
      <security mode="None" />
     </binding>
  </basicHttpBinding>
</bindings>

相关资源:

答案 1 :(得分:2)

要在基本HTTP绑定下使用SSL over HTTP,您需要切换端点以使用传输级安全性。在您的情况下,您还需要指明客户端凭据类型:

<bindings>
  <basicHttpBinding>
    <binding name="windowsHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="Windows" />
        <message />
      </security>
     </binding>
  </basicHttpBinding>
</bindings>