.net WCF GET HTTPS 400 错误请求,但与 Http 一起工作正常
Posted
技术标签:
【中文标题】.net WCF GET HTTPS 400 错误请求,但与 Http 一起工作正常【英文标题】:.net WCF GET HTTPS 400 Bad Request but works fine with Http 【发布时间】:2013-01-08 06:24:30 【问题描述】:我在 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 时的任何警告...... 【参考方案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>
【讨论】:
以上是关于.net WCF GET HTTPS 400 错误请求,但与 Http 一起工作正常的主要内容,如果未能解决你的问题,请参考以下文章