2013-08-22 119 views
0

我完全被这个问题所困扰,此刻我一直在阅读各种文章和博客,并且让大部分的建议的更改,但我仍然有这个问题。“远程服务器返回了意外的响应:(400)错误的请求”

基本上我传递一个数组对象作为参数从客户端到服务,然后给我上面的错误。

我可以处理200条记录,但是如果我将它设置为250例如,它会返回400错误。 我已启用跟踪等,但没有任何记录在所有错误了。客户端和服务都在相同的环境中运行(测试目的)-windows 2008r2 我将显示两个配置文件以及我如何调用服务。

客户端配置

<?xml version="1.0"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <configSections> 
    </configSections> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    <httpRuntime executionTimeout="180" maxRequestLength="2147483647" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_FinHqclient" closeTimeout="00:25:00" 
      openTimeout="00:25:00" receiveTimeout="10:50:00" sendTimeout="00:25:00" 
      maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
      useDefaultWebProxy="true" allowCookies="false"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />   
      <security> 
      <transport realm="" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
     <basicHttpBinding> 
     <binding maxBufferPoolSize="2147483647" name="test" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" > 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="maxItemsInObjectGraphBehaviour"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483646" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <client> 
     <endpoint address="http://server:8123/service.svc" behaviorConfiguration="maxItemsInObjectGraphBehaviour" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_FinHqclient"  
     contract="sfgServ.FinHqclient" name="WSHttpBinding_FinHqclient"> 
     <identity> 
      <servicePrincipalName value="host/local" /> 
     </identity> 
     </endpoint> 
    </client>  
    </system.serviceModel> 
</configuration> 

这是服务器配置文件:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 

    </configSections> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\log\Traces.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" />  
<httpRuntime executionTimeout="180" maxRequestLength="2147483647" /> 
    </system.web> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" 
     logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /> 
    </diagnostics> 
    <protocolMapping> 
     <add scheme="http" binding="wsHttpBinding"/> 
    </protocolMapping> 
    <services> 
     <service name="SFG.CRM2011.WebServiceFinHqFinHq.Service" behaviorConfiguration="SFG.CRM2011.WebServiceFinHq.ServiceBehavior"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="SFG.CRM2011.WebServiceFinHq.BindConfig" 
        contract="sfgServ.IClientFinHQ" behaviorConfiguration="SFG.CRM2011.WebServiceFinHq.wsServiceEndpointBehavior"> 
     </endpoint> 
     <endpoint contract="IMetadataExchange" binding="mexHttpBinding" bindingConfiguration="higherMessageSize_MEX" address="mex" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="SFG.CRM2011.WebServiceFinHq.wsServiceEndpointBehavior">   
      <dataContractSerializer maxItemsInObjectGraph="2147483646" /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="SFG.CRM2011.WebServiceFinHq.ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
     <behavior > 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors>  
    </behaviors>  
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <bindings> 
     <wsHttpBinding > 
     <binding name="SFG.CRM2011.WebServiceFinHq.BindConfig" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" > 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message establishSecurityContext="false" /> 
      </security> 
      <reliableSession enabled="true" ordered="True" inactivityTimeout="00:10:00" /> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
     </binding>   
     </wsHttpBinding> 
     <mexHttpBinding> 
     <binding name="higherMessageSize_MEX" />     
     </mexHttpBinding> 
     <basicHttpBinding > 
     <binding maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" > 
      <readerQuotas maxStringContentLength="2147483647" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <security> 
    <requestFiltering> 
     <requestLimits maxAllowedContentLength="9000000" /> 
    </requestFiltering> 
    </security> 
</system.webServer> 
</configuration> 

下面是我如何调用客户端这个服务...

List<FUMStruct> fList = new List<FUMStruct>(); 

for (int i = 0; i < 250; i++) 
{ 
    var t = new FUMStruct(); 
    t.clientID = "1234"; 
    t.ClientCRMGUID = new Guid("9EACA7AE-FE7E-E211-956A-00505622E202"); 
    t.CRMAccountCRMGUID = new Guid("A63D9ADC-0CFF-E211-94E9-00505622E202"); 
    t.Balance = 200 + i; 
    fList.Add(t); 
} 
var serv = new FinHqclientClient();    
serv.UpdateLastFUMGUID(fList.ToArray()); 
+0

的(HTTP [大WCF Web服务请求与(400)HTTP错误的请求未能]可能重复://计算器.com/questions/784606/large-wcf-web-service-request-failing-with-400-http-bad-request) –

+0

不,我已经看过那篇文章,并试过那里的建议(可以看出我的配置文件)没有运气 – BruceAus

+0

对不起!我显然没有详细说明这一点。 –

回答

0

我请注意,您已增加了客户端的maxRequestLength,但不是您的服务器:

<system.web> 
    <!-- ... --> 
    <httpRuntime executionTimeout="180" maxRequestLength="2147483647" /> 
    </system.web> 

该配置选项实际上只与服务器相关,因为它设置了入站请求的允许大小。无论如何,我会将这部分添加到您的服务器配置文件中,看看是否照顾到了这个问题。默认请求大小为4MB,根据经验我知道这可能会导致您报告的错误。

+0

谢谢,试过了,但还是没有运气。仍然收到相同的错误消息。这么奇怪! – BruceAus

0

这是因为绑定中存在'名称'值。因此,我们设置的自定义值没有被应用,并且它正在加载服务器默认值(甚至不知道在哪里保留了不同绑定的“默认值”!)我通过在线阅读并创建新文章服务只使用基本的绑定..直到我删除名称,然后开始工作! 然后,我必须弄清楚如何做到这一点的wsHttpBinding,因为使用该绑定,如果你没有指定名称(然后显然你不能引用配置),你会得到各种各样的或安全问题等,而服务不工作..因此,解决方案是添加另一个没有name属性的绑定。

设置最终只需要在服务器端,因为我留下了默认的客户端值(低于上面示例中的值)并且仍然有效。以下是完整web.config..note我怎么过拖欠两个basicHttpBinding的和WsHttpBinding的

<bindings> 
     <wsHttpBinding > 
     <binding ***name="problemWithValue"*** maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" > 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message establishSecurityContext="false" /> 
      </security> 
      <reliableSession enabled="true" ordered="True" inactivityTimeout="00:10:00" /> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
     </binding> 
     <binding  maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" > 
      <security mode="None"> 
      <transport clientCredentialType="None" /> 
      <message establishSecurityContext="false" /> 
      </security> 
      <reliableSession enabled="true" ordered="True" inactivityTimeout="00:10:00" /> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
     </binding> 
     </wsHttpBinding> 
     <mexHttpBinding> 
     <binding name="higherMessageSize_MEX" />     
     </mexHttpBinding> 
     <basicHttpBinding > 
     <binding maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" > 
      <readerQuotas maxStringContentLength="2147483647" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
相关问题