将WCF RESTful服务添加为经典ASP网站的应用程序

时间:2015-09-18 15:12:16

标签: wcf ssl https

好。我们在Windows Server 2012上的IIS 8.5上运行了一个传统的经典asp网站。为网站启用了http和https协议。最近我开发了一个独立的WCF Web服务,并将其作为应用程序添加到我们的网站(具有不同的应用程序池)。 现在WCF可以使用http协议,但不能使用https。 Service.svc通常使用https加载,但是对于所有请求都返回400

这是我的web.config

<system.web>
    <compilation targetFramework="4.5" />
    <customErrors mode="Off"/>
    <httpRuntime targetFramework="4.5" maxUrlLength="1000"/>
  </system.web>
   <system.serviceModel> 
    <services>
      <service name="KATProductFilter.Service1" behaviorConfiguration="mycorp.Callback.SecPayServiceBehavior">
         <endpoint address=""
                   binding="wsHttpBinding" bindingConfiguration="TransportBinding" 
                   contract="KATProductFilter.IService1"/>      
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />        
      </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="mycorp.Callback.SecPayServiceBehavior">
                <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <wsHttpBinding>
            <binding name="TransportBinding">
                <security mode="Transport">
                    <transport clientCredentialType="None" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true">  
        <baseAddressPrefixFilters> 
            <add prefix="https://www.knivesandtools.nl/filterssl"/> 
        </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
  </system.serviceModel>

提前致谢

1 个答案:

答案 0 :(得分:0)

我解决了。端点的绑定必须是webHttpBinding,它必须具有bindingConfiguration和behaviorConfiguration,如下所示。

<system.serviceModel>
<bindings>
    <webHttpBinding>
        <binding name="TransportSecurity">
            <security mode="Transport">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </webHttpBinding>
</bindings>
<behaviors>
    <serviceBehaviors>
        <behavior name="test">
            <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
            <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
    <behavior name="katproductfilter_behavior">
        <dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483646"/>
        <webHttp/>
    </behavior>
    </endpointBehaviors>
</behaviors>
<services>
    <service name="KATProductFilter.Service1" behaviorConfiguration="test">
        <endpoint address="" binding="webHttpBinding" contract="KATProductFilter.IService1" bindingConfiguration="TransportSecurity" behaviorConfiguration="katproductfilter_behavior"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
    </service>
</services>
<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0"/>

P.S Ricardo感谢您的链接。