1

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

我已按照本教程创建自己的证书并使用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。

有什么建议吗?

4

1 回答 1

7

为了找到这个答案,我检查了所有 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>
于 2014-01-30T14:59:58.570 回答