【问题标题】:.net WCF GET HTTPS 400 Bad Request but works fine with Http.net WCF GET HTTPS 400 错误请求,但与 Http 一起工作正常
【发布时间】:2026-01-06 04:35:01
【问题描述】:

我在 Windows Server 2008 R2 上有一个 WCF。我有 SSL 证书。

使用 IE,http URL 工作正常(我得到了我的数据),但使用 Https 我有一个 400 错误请求。

在我的 wcf 的 web.config 下方:

<?xml version="1.0" encoding="utf-8"?>

<bindings>
  <basicHttpBinding>
    <binding name="TransportSecurity">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>    
  </basicHttpBinding>      
</bindings>

<behaviors>
  <endpointBehaviors>

    <behavior name="ServiceRequestResourcesAspNetAjaxBehavior">
      <webHttp defaultOutgoingResponseFormat="Json" />      
    </behavior>

    <behavior name="ServiceRequestResourcesAspNetAjaxBehaviorHttps">          
    </behavior>

  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ServiceRequestResourcesBehaviors">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true" />          
    </behavior>        
  </serviceBehaviors>
</behaviors>

<services>
  <service behaviorConfiguration="ServiceRequestResourcesBehaviors" 
           name="BaseSite.ServiceRequestResources">

   <endpoint address="" 
             behaviorConfiguration="ServiceRequestResourcesAspNetAjaxBehaviorHttps" 
             binding="basicHttpBinding" 
             bindingConfiguration="TransportSecurity"
             contract="BaseSite.ServiceRequestResources" />

    <endpoint address="" 
              behaviorConfiguration="ServiceRequestResourcesAspNetAjaxBehavior" 
              binding="webHttpBinding" contract="BaseSite.ServiceRequestResources" />

  </service>      
</services>

【问题讨论】:

  • 尝试将 SvcTraceViewer 日志记录添加到您的配置中以获取有关错误的更多详细信息。
  • 在使用 WCF 时,任何类型的证书警告都会导致错误 400。当您直接访问 URL 时,是否收到任何警告?
  • 使用 SvcTraceViewer 我发现错误:“System.Xml.XmlException:无法读取消息正文,因为它是空的”
  • 直接访问 URL 时的任何警告......

标签: c# .net wcf ssl https


【解决方案1】:

经过大量测试,它正在工作。我需要在webHttpBinding而不是basicHttpBinding中配置绑定部分,但我不知道为什么。

在我的绑定部分下方:

<bindings>
    <webHttpBinding>
        <binding name="TransportSecurity">
            <security mode="Transport">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </webHttpBinding>
</bindings>

【讨论】:

    【解决方案2】:

    对于您的部分,您是否尝试过为 HTTPS 添加端点,如下所示:

    <services>
        <service behaviorConfiguration="ServiceRequestResourcesBehaviors" 
            name="BaseSite.ServiceRequestResources">
    
            <endpoint address="" 
              behaviorConfiguration="ServiceRequestResourcesAspNetAjaxBehaviorHttps" 
              binding="basicHttpBinding" 
              bindingConfiguration="TransportSecurity"
              contract="BaseSite.ServiceRequestResources" />
    
            <endpoint address="" 
              behaviorConfiguration="ServiceRequestResourcesAspNetAjaxBehavior" 
              binding="webHttpBinding" contract="BaseSite.ServiceRequestResources" />
    
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>      
    </services>
    

    【讨论】:

      最近更新 更多