通过HTTPS的WCF REST

时间:2013-09-18 13:32:27

标签: wcf rest iis ssl iis-express

我正在使用WCF,C#和.NET Framework 4.0开发REST Web服务。

我已按照此tutorial创建自己的证书,并使用 IIS Express 作为开发服务器。

但是现在,我不知道为什么,如果我使用 https 而不是 http ,我将无法访问我的网络服务。

这是 IIS Express applicationhost.config:

<site name="MyGameWCFService" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="D:\Fuentes\CSharp\Test\MyLib\MyGameWCFService" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:7342:localhost" />
        <binding protocol="https" bindingInformation="*:44300:localhost" />
        <binding protocol="https" bindingInformation="*:443:Melnibone" />
    </bindings>
</site>

这是我的WCF web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="MyGameWCFService.MyGameService"
               behaviorConfiguration="MyGameServiceBehaviour">
        <endpoint address=""
                  contract="MyGameWCFService.IMyGameService"
                  behaviorConfiguration="restfulBehavior"
                  binding="webHttpBinding"
              bindingConfiguration="WebHttpBindingConfig"  />
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="WebHttpBindingConfig">
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="restfulBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyGameServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <connectionStrings>
    <add name="MyGameContext"
          providerName="System.Data.SqlClient"
          connectionString="Server=.\SQLEXPRESS;Database=MyGame;Integrated Security=True;MultipleActiveResultSets=True"/>
  </connectionStrings>
</configuration>

我可以使用此网址访问网络服务:
http://localhost:7342/MyGameService.svc/users
但如果我使用其他的话我就​​不能了:
https://localhost:4430/MyGameService.svc/users
https://Melnibone:443/MyGameService.svc/users

我正在同一台计算机上测试它(我在Melnibone上测试它)。

当我从https://localhost:44300/MyGameService.svc/users访问它时,我收到了HTTP 404 Not Found。

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

为了创建这个答案我检查了所有的http绑定并花了大约半天。但我明白了! 对配置进行更改,如下所示:

<services>
   <service behaviorConfiguration="Default" name="Service_Name">
    <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="httpsBinding" contract="Contract.IContract" />
   </service>
  </services>
  <bindings>
    <webHttpBinding>
     <binding name="httpsBinding">
        <security mode="Transport" />
     </binding>
     </webHttpBinding>
   </bindings>
  <behaviors>
   <endpointBehaviors>
    <behavior name="webBehavior">
     <webHttp />
    </behavior>
   </endpointBehaviors>
   <serviceBehaviors>
    <behavior name="Default">
     <serviceMetadata httpsGetEnabled="true" />
    </behavior>
   </serviceBehaviors>
  </behaviors>