通过 HTTPS 的 WCF REST

标签 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>

我可以使用这个 url 访问网络服务:
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。

有什么建议吗?

最佳答案

为了找到这个答案,我检查了所有的 http 绑定(bind)并花了大约半天的时间。但我明白了! 像这样更改您的配置:

<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>

关于通过 HTTPS 的 WCF REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18873659/

相关文章:

c# - 覆盖应用程序根 URL 的真正作用是什么?

c# - 如何以编程方式将 wcf 绑定(bind)部分添加到 web.config

WCF SOA 命名约定

wcf - 通过 WCF REST 传递验证异常

algorithm - 通过 restful API 通过指定的 id 保护对数据库中资源的访问

iis - prerender.io IIS 配置

apache - 单击我网站上的链接时阻止发送引荐来源网址,但一个域除外

wcf - 自托管 WCF Programattic HTTPS?

php - 如何在 Laravel 4 中使用 RESTful 实现到 Controller 的命名路由?

java - 如何为 Web 应用程序编写一些独立的 Restful 测试