获取404没有端点侦听错误WCF 4.0使用Https basicHttpBinding over Transport安全性

时间:2012-03-23 17:39:40

标签: c# .net wcf wcf-security wcf-binding

我正在尝试为我在IIS 7.5中托管的wcf Web服务启用https安全性。我查看了我在网上可以找到的关于此的每篇文章,并尝试了我能找到的每个配置或IIS技巧或变体。我认为这可能是IIS,Windows级配置问题。我们使用的是外卡SSL证书,如* .mycompany.com。如果有任何影响,此证书将在已存在于同一IIS中的其他3个站点上使用。有没有人知道我在这里遇到了什么?这是一个公共服务器,非TEST和http绑定工作正常。我在开发和生产服务器上遇到了同样的https问题。我们在这个生产箱上有另一个https网站,它可以很好地发送和接收数据。我得到了例外:

  

没有终点收听   https://subdomain.mydomain.com/MyService.svc可以接受   信息。这通常是由不正确的地址或SOAP操作引起的。

     

内部例外:

     

远程服务器返回错误:(404)Not Found。

这是我的web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <appSettings file="LocalAppSettings.config">
      <!--<add key="CustomIISServiceHostEndPoint" value="https://subdomain.mydomain.com/MyService.svc" />-->
   </appSettings>
   <system.web>
      <compilation debug="true" targetFramework="4.0" />
      <customErrors mode="Off" />
  </system.web>
  <system.serviceModel>
      <bindings>
  <basicHttpBinding>
    <binding name="COLWebServiceBinding" maxReceivedMessageSize="134217727" sendTimeout="00:03:00" receiveTimeout="00:03:00">
        <security mode="Transport">
           <transport clientCredentialType="None" />
        </security>
        <readerQuotas maxArrayLength="65536" maxBytesPerRead="65536" maxStringContentLength="134217727" />
     </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="COLWebService.ServiceBehavior" name="COLWebService">
    <endpoint address="https://subdomain.mydomain.com/MyService.svc"
              binding="basicHttpBinding"
              contract="MyCompany.COLWebService.ICOLWebService"
              bindingConfiguration="COLWebServiceBinding" />
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
  </service>
</services>
<extensions>
  <behaviorExtensions>
    <add name="errorHandler" type="MyCompany.COLWebService.ErrorHandlerBehaviorExtensionElement, MyCompany.COLWebService" />
  </behaviorExtensions>
</extensions>
<behaviors>
  <serviceBehaviors>
    <behavior name="COLWebService.ServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    <!--<behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>-->
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
</serviceHostingEnvironment>
 </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer> 
 </configuration>

这是我的客户app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                 <binding name="wsHttpBinding_ICOLWebService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="134217727"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
                      <readerQuotas maxStringContentLength="134217727" maxArrayLength="65536"
                    maxBytesPerRead="65536" />
                      <security mode="Transport">
                          <transport clientCredentialType="None" proxyCredentialType="None" />
                     </security>
                 </binding>
            </basicHttpBinding>
         </bindings>
        <client>
             <endpoint address="https://subdomain.mydomain.com/MyService.svc"
            binding="basicHttpBinding" bindingConfiguration="wsHttpBinding_ICOLWebService"
            contract="COLWebService.ICOLWebService" name="wsHttpBinding_ICOLWebServiceEP" />
          </client>
    </system.serviceModel>
  </configuration>

4 个答案:

答案 0 :(得分:0)

您可以通过修改system32 \ inetsrv中的applicationhost.config文件,手动将主机标头值添加到SSL证书。查找IIS实例的部分。

答案 1 :(得分:0)

可能是尚未为新网站配置https绑定。

在IIS中,选择该站点,然后单击高级设置并检查“绑定”的内容。确保https在列表中。

修改

另一件事可能是svc处理程序未激活。 ASP.Net是否为该网站启用了?

您应首先测试它而不使用https,以确保问题与https相关。

修改2

确保该网站已启动。你有没有检查过你可以通过浏览器访问svc。

您的计算机上有多个站点,都使用https。您是否配置了主机标头以允许所有网站使用https?此网站上的https是否位于不同的端口上?

答案 2 :(得分:0)

打开.svc文件 - 我猜它不会引用COLWebService作为服务。

您的配置文件包含:

name="COLWebService"

在服务声明中。这需要匹配.SVC的命名服务,查看你给出的网址,我认为这将是'MyService'。

答案 3 :(得分:0)

您的服务模型部分应该是这样的

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" httpsGetUrl="/ssl"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="6553600" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="TransportSecurity" maxReceivedMessageSize="2147483647">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="COLWebService.Service" behaviorConfiguration="">
        <endpoint address="/ssl" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" contract="MyCompany.COLWebService.ICOLWebService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

您的客户将通过https https://subdomain.mydomain.com/MyService.svc/ssl访问服务,http与旧版https://subdomain.mydomain.com/MyService.svc相同