我得到For TransferMode.Buffered,MaxReceivedMessageSize和MaxBufferSize必须是相同的值

时间:2012-03-17 04:24:06

标签: wcf iis azure windows-phone-7.1

这是我在Windows Azure服务项目上的Web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
  </configSections>
  <!--  To collect diagnostic traces, uncomment the section below or merge with existing system.diagnostics section.
        To persist the traces to storage, update the DiagnosticsConnectionString setting with your storage credentials.
        To avoid performance degradation, remember to disable tracing on production deployments.
  <system.diagnostics>     
    <sharedListeners>
      <add name="AzureLocalStorage" type="NutriLeaf.Services.AzureLocalStorageTraceListener, NutriLeaf.Services"/>
    </sharedListeners>
    <sources>
      <source name="System.ServiceModel" switchValue="Verbose, ActivityTracing">
        <listeners>
          <add name="AzureLocalStorage"/>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
        <listeners>
          <add name="AzureLocalStorage"/>
        </listeners>
      </source>
    </sources> 
   </system.diagnostics> -->

  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>




  <system.serviceModel>


    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>

    <behaviors>
      <serviceBehaviors>
        <behavior>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true" />
          <!-- 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" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
    <connectionStrings>
        <remove name="LocalSqlServer" />
        <add connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" name="LocalSqlServer" providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

这是我在Windows Phone 7客户端上获得的例外

对于TransferMode.Buffered,MaxReceivedMessageSize和MaxBufferSize必须是相同的值。 参数名称:bindingElement

我甚至尝试过设置TransferMode =“Streamed”,但这没有用,我得到了同样的例外。你能帮帮我吗?我错过了Web.config文件的部分吗?

请帮忙!

2 个答案:

答案 0 :(得分:4)

问题可能是在客户端上生成的。检查WP7应用程序上的ServiceReferences.ClientConfig文件并检查绑定。他们应该是这样的:

<bindings> 
    <basicHttpBinding> 
        <binding name="{YOUR SERVICE NAME HERE" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
    <security mode="None" /> 
</binding> 

您需要确保maxBufferSize和maxReceivedMessageSize与服务器配置中的值相同。

答案 1 :(得分:3)

我遇到了同样的问题。我不知道这是否是WP7 Silverlight运行时中的错误,但是如果绑定是在代码而不是ServiceReferences.ClientConfig中定义的,则它可以正常工作。像这样:

var client = new MyServiceClient(
    new BasicHttpBinding( BasicHttpSecurityMode.None )
    {
        MaxReceivedMessageSize = 2147483647,
        MaxBufferSize = 2147483647
    },
    new EndpointAddress( yourAddress ) );

我无法弄清楚原因。