0

我最近需要更改我的 REST WCF 服务以使用 SSL。它托管在 IIS 6 中,在 SSL 要求之前运行良好。

我无法弄清楚为什么会收到 400 bad request 错误。我有诊断日志,它说

<Message>The body of the message cannot be read because it is empty.</Message>

web.config 看起来像:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <webServices>
            <protocols>
            <add name="HttpGet"/>
        </protocols>
        </webServices>
        <identity impersonate="true"/>
        <customErrors mode="Off"/>
    </system.web>

    <startup>
        <supportedRuntime version="v4.0.30319"/>
    </startup>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IMessageService">
                    <security mode="Transport">
                        <transport clientCredentialType="None"/>
                    </security>
                </binding>
             </wsHttpBinding>
             <webHttpBinding>
                 <binding name ="webBinding">
                 </binding>
             </webHttpBinding>
             <basicHttpBinding>
                 <binding name="httpBinding">
                     <security mode="Transport">
                         <transport clientCredentialType = "None"/>
                     </security>
                 </binding>
             </basicHttpBinding>
        </bindings>
        <services>
            <service behaviorConfiguration="metadataBehavior"
                     name="XXXDataService.XXXDataService">
                <endpoint address="" 
                          binding="wsHttpBinding"
                          bindingNamespace="http://blah.blah.blah.com/XXXDataService/"
                          bindingConfiguration="WSHttpBinding_IMessageService"
                          contract="ZZZDataService.IZZZDataServices">
                </endpoint>
                <endpoint address="mex" 
                          binding="mexHttpsBinding" contract="IMetadataExchange" />
            </service>
        </services>
        <standardEndpoints>
            <webHttpEndpoint>
                <standardEndpoint name="" 
                                  helpEnabled="true" 
                                  automaticFormatSelectionEnabled="true" />
            </webHttpEndpoint>
        </standardEndpoints>
        <behaviors>
            <serviceBehaviors>
                <behavior name="metadataBehavior">
                    <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
                    <serviceDebug includeExceptionDetailInFaults="True" 
                                  httpHelpPageEnabled="True"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

我只删除了诊断部分,需要通过替换为 XXX 和 ZZZ 来保护名称。

任何帮助或建议将不胜感激。

服务实现:

[ServiceBehavior(Namespace="blah.blah.blah.com", Name="XXXDataService")] 
public class YYYDataService : IYYYDataService 
{ 
    public string GetUser(string id) 
    { 
        string result = string.Empty; 
        using (YYYAdmintTree tree = new YYYAdmintTree()) // used for accessing DB 
        { 
            result = tree.GetUserById(id, 1); 
        } 
        return result; 
    }
} 

合同:

[ServiceContract(Namespace="https://blah.blah.blah.com", Name="XXXDataService")]
public interface IYYYDataService
{
    [OperationContract]
    [WebGet(UriTemplate="/GetUser/{id}", ResponseFormat=WebMessageFormat.Json)]
    string GetUserById(string id);
}
4

1 回答 1

0

当您将错误的参数作为输入传递时,会出现错误 400。如果您再次传递 XML 或 JSON 作为输入检查。如果服务器无法找到它,它会给你错误 404。但 400 肯定表明提供的输入有问题。

于 2013-11-13T06:20:42.863 回答