首页 > 解决方案 > WCV MaxBufferSize 参数被忽略

问题描述

我有一个用 Visual Studio 2012 编写的 WCF 客户端,需要将包含数百个项目的 List<> 发送到其服务器。如果它发送十个项目,它可以工作。我过去遇到过这个问题,我可以在客户端的配置文件中设置 MaxBufferSize 参数。但是,我愚蠢地丢失了该配置,并且无法再次使其正常工作。我可能完全失明,但我看不出有什么问题。

这是配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key="Connection String" value="Dsn=Worthington;uid=anneal;pwd=anneal;Server=localhost;Port=5432" />
    <add key="PropertiesFileList" value="Thermal Properties/TPP Tables.xml" />
    <add key="TuningFileName" value="HeatModelWSC.xml"/>
    <add key="LogPath" value="Logs"/>
    <add key="RunType" value="Console"/>
    <add key="WriteInitialPredictions" value="False"/>
    <add key="WriteRevisedPredictions" value="False"/>
    <add key="WriteFinalTemps" value="False"/>
    <add key="WriteCurrentTemps" value="True"/>
    <add key="WriteTimesToTemp" value="False"/>
    <add key="SuppressInitialPredictions" value="YES"/>
    <add key="SuppressRevisedPredictions" value="YES"/>
    <add key="SuppressOnlinePredictions" value="NO"/>
  </appSettings>

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcp"
                 maxReceivedMessageSize="20000000"
                 maxBufferSize="20000000"
                 maxBufferPoolSize="20000000">
            <readerQuotas maxDepth="32"
                 maxArrayLength="200000000"
                 maxStringContentLength="200000000"/>
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="SimShopService.SimShopService">
        <endpoint address=""
                  binding="netTcpBinding"
                  bindingConfiguration="netTcp"
                  contract="SimShopService.ISimShopServiceLib">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
        <host>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>

而且,如果它很重要,这里是服务器的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="WriteInitialPredictions" value="False"/>
    <add key="WriteRevisedPredictions" value="False"/>
    <add key="WriteFinalTemps" value="False"/>
    <add key="WriteCurrentTemps" value="True"/>
    <add key="WriteTimesToTemp" value="False"/>
  </appSettings>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ISimShopServiceLib" />
      </basicHttpBinding>
      <netTcpBinding>
        <binding name="NetTcpBinding_ISimShopServiceLib"
                 sendTimeout = "00:03:00" />
        <binding name="NetTcpBinding_ISimShopServiceLib_Debug" 
                 sendTimeout ="00:30:00"/> 
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint name="NetTcpBinding_ISimShopServiceLib"
                bindingConfiguration="NetTcpBinding_ISimShopServiceLib"
                address="net.tcp://localhost:1235/SimShopService"
                binding="netTcpBinding"
                contract="SimShopServiceReference.ISimShopServiceLib">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint name="NetTcpBinding_ISimShopServiceLib_Debug"
                bindingConfiguration="NetTcpBinding_ISimShopServiceLib_Debug"
                address="net.tcp://localhost:1236/SimShopService"
                binding="netTcpBinding"                
                contract="SimShopServiceReference.ISimShopServiceLib">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

标签: wcf

解决方案


请在您的线程中发布完整的错误详细信息。
看起来下面的文件更像是客户端配置而不是服务器配置,因为配置中有一个客户端部分。此外,我们可以将属性的值增加到最大正 INT 值,因为 20KB 太小了。
此外,我们最好在客户端和服务器端都配置这些属性。
服务器端。

<system.serviceModel>
    <services>
      <service name="WcfService1.Service1">
        <endpoint address="" binding="netTcpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="mybinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
          <security mode="None">
          </security>
          <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </binding>
      </netTcpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

这也适用于客户端服务端点中使用的绑定。

    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IService1" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
                    <security mode="None">
                        <transport sslProtocols="None" />
                    </security>
                  <readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" maxDepth="2147483647"/>
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://vabqia969vm:8866/Service1.svc" binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_IService1" contract="ServiceReference1.IService1"
                name="NetTcpBinding_IService1" />
        </client>
</system.serviceModel>

请注意使用bindingConfiguration属性应用配置。
如果有什么我可以帮忙的,请随时告诉我。


推荐阅读