Reputation: 75
I am totally stumped with this issue I am having at the moment.I have been reading various articles and blogs for the last 2 days and made most of the recommended changes but I'm still having this issue.
Basically I am passing an array object as a parameter from the client to the service,which then gives me the above error.
I can process 200 records ok, but if I set it at 250 for example, it returns the 400 error. I have enabled tracing etc but nothing is being logged at all when it errors out. Both the client and service are running on the same environment (testing purposes) -windows 2008r2 I will show both config files and also how I'm calling the service.
Client config
<?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>
This is the server config file:
<?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>
Below is how I'm calling this service in the client...
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());
Upvotes: 0
Views: 12844
Reputation: 75
It was because there was a ‘name’ value in the binding,. Therefore the custom values we were setting weren’t being applied and it was loading the server defaults (not even sure where the ‘defaults’ for the different bindings are kept!) I found this out by an article I read online and making a new service using basic binding only..which kept failing,until I removed the name then it started working! Then I had to figure out how to do it for wsHttpBinding because with that binding, if you don’t specify the name (and then obviously you cant reference the configuration) you get all sorts or security issues etc and the service doesn’t work..so the solution was to add another binding without the name property in it.
The settings were only needed on the server side in the end,because i left the default client values (lower than the ones in the example above) and it still worked. Below is the full web.config..note how i had to default for both basicHttpbinding and 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>
Upvotes: 1
Reputation: 13077
I notice that you've increased the maxRequestLength for your client, but not your server:
<system.web>
<!-- ... -->
<httpRuntime executionTimeout="180" maxRequestLength="2147483647" />
</system.web>
This configuration option is really only relevant for the server, since it sets the allowed size of inbound requests. In any case, I would add this part to your server configuration file and see if that takes care of the problem. The default request size is 4MB, and I know from experience this can cause the error you're reporting.
Upvotes: 0