C# WCF WinCE 解决方案 错误提示之:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性

网上的解决方案:

出现这种错误,先去修改服务器端和客户端的MaxReceivedMessageSize值,如果还报错那么查看你的代码调用了是不是new了一个新的BasicHttpBinding对象,如果是new了新的那么你的webconfig根本就没有被调用,在new的时候要将 <binding name="DataSyncService" 中的name值作为参数传进去,或者是在代码里重新设置MaxReceivedMessageSize值

第一种

DataSyncServiceClient service = new DataSyncServiceClient(new BasicHttpBinding("DataSyncService"), new EndpointAddress(new Uri(con)));

第二种

DataSyncServiceClient service = new DataSyncServiceClient(new BasicHttpBinding(), new EndpointAddress(new Uri(con)));

(service.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
(service.Endpoint.Binding as BasicHttpBinding).MaxBufferPoolSize = int.MaxValue;
(service.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;

我自己项目中的问题:

                //SMC.Binding binding = U8ServiceClient.CreateDefaultBinding();
                //string remoteAddress = U8ServiceClient.EndpointAddress.Uri.ToString();
                //EndpointAddress endpoint = new EndpointAddress(remoteAddress);
                //U8Client = new U8ServiceClient(binding, endpoint);
                //SessionID = U8Client.StartSession();

我们之前是用上面的这个方法来的:即使我在服务器端设置了:

 maxReceivedMessageSize="2147483647"

<dataContractSerializer maxItemsInObjectGraph="2147483647" />

也还是不起作用。

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0">
            <assemblies>
                <add assembly="Interop.U8Login, Version=1.14.0.0, Culture=neutral, PublicKeyToken=79A4E7AD54EEABCA"/></assemblies></compilation>
    <customErrors mode="Off"/>
  </system.web>
    <appSettings>
        <add key="defaultConnection" value="sqlCon"/>
        <add key="DALAssemblyName" value="HZYA.DALSQLServer"/>
        <add key="DALFactoryType" value="HZYA.DALSQLServer.DALMSSqlFactory"/>
    <add key="SessionTimeOut" value="00:30:00"/>
    </appSettings>
    <connectionStrings>
        <!--<add name="sqlCon" connectionString="Data Source=CQY-PC\SQLEXPRESS2005;Initial Catalog=UFDATA_001_2010;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>
        <add name="System" connectionString="Data Source=CQY-PC\SQLEXPRESS2005;Initial Catalog=UFSysTem;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>
        <add name="Barcode" connectionString="Data Source=CQY-PC\SQLEXPRESS2005;Initial Catalog=Barcode;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>-->
    <add name="sqlCon" connectionString="Data Source=wuyf\sql2005;Initial Catalog=UFDATA_001_2012;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>
    <add name="System" connectionString="Data Source=wuyf\sql2005;Initial Catalog=UFSysTem;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>
    <add name="Barcode" connectionString="Data Source=wuyf\sql2005;Initial Catalog=Barcode;User ID=sa;Password=sasa" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.serviceModel>
        <services>
            <service name="CommonService" behaviorConfiguration="ServiceBehavior">
                <endpoint address="" binding="wsHttpBinding" contract="ICommonService" bindingConfiguration="LargeSizeWsHttpBinding"/>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                <endpoint address="basic" binding="basicHttpBinding" contract="ICommonService" bindingConfiguration="LargeSizeBasicHttpBinding"/>
            </service>
            <service name="BarcodeService" behaviorConfiguration="ServiceBehavior">
                <endpoint address="" binding="wsHttpBinding" contract="IBarcodeService"/>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                <endpoint address="basic" binding="basicHttpBinding" contract="IBarcodeService"/>
            </service>
            <service name="PrintService" behaviorConfiguration="ServiceBehavior">
                <endpoint address="" binding="wsHttpBinding" contract="IPrintService"/>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
                <endpoint address="basic" binding="basicHttpBinding" contract="IPrintService"/>
            </service>
      <service name="LoginService" behaviorConfiguration="ServiceBehavior" >
        <!--<endpoint address="" binding="wsHttpBinding" contract="ILoginService" bindingConfiguration="NoneSecurity" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->
        <endpoint address="basic" binding="basicHttpBinding" contract="ILoginService"/>
      </service>
      <service name="U8Service" behaviorConfiguration="ServiceBehavior" >
        <endpoint address="" binding="wsHttpBinding" contract="IU8Service" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <endpoint address="basic" binding="basicHttpBinding" contract="IU8Service"/>
      </service>
      <!--<service name="U8Service" behaviorConfiguration="ServiceBehavior" >
        <endpoint address="" binding="wsHttpBinding" contract="ILoginService" bindingConfiguration="NoneSecurity" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <endpoint address="basic" binding="basicHttpBinding" contract="IU8Service"/>
      </service>-->
        </services>
        <bindings>
            <basicHttpBinding>
                <binding name="LargeSizeBasicHttpBinding" maxBufferPoolSize="2147483647" receiveTimeout="00:00:10" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
                    <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
                </binding>
            </basicHttpBinding>
            <wsHttpBinding>
        <binding name="LargeSizeWsHttpBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
                </binding>
        <binding name="NoneSecurity" receiveTimeout="00:00:50" maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
          <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
          <reliableSession enabled="true"/>
          <security mode="None">
            <message establishSecurityContext="true"/>
          </security>
        </binding>
      </wsHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
                </behavior>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
    <system.webServer>
        <directoryBrowse enabled="true" showFlags="Date, Time, Size, Extension, LongDate"/>
    </system.webServer>
</configuration>

 直到看到网上的这篇文章后,我修改了我的客户端 binding 类型为 basehttpbinding  后,才解决了。

代码如下:

                BasicHttpBinding binding = new BasicHttpBinding();
                binding.MaxReceivedMessageSize = int.MaxValue;
                binding.MaxBufferPoolSize = int.MaxValue;
                binding.MaxBufferSize = int.MaxValue;
                string remoteAddress = U8ServiceClient.EndpointAddress.Uri.ToString();
                EndpointAddress endpoint = new EndpointAddress(remoteAddress);
                U8Client = new U8ServiceClient(binding, endpoint);
原文地址:https://www.cnblogs.com/wuyifu/p/2790824.html