1

64K を超えるメッセージに対して maxreceivedmessagesize エラーが発生します。問題は、サーバーとクライアントの両方で既にすべてを変更しており、問題が解決していないことです。

サーバー上の私の web.config と、Silverlight クライアントの構成は次のとおりです。

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="secureobjectbind" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
          maxArrayLength="2147483647" maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
        <security mode="Transport" />
      </binding>
    </basicHttpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name="GiveWeb.Services.ShopBehavior">
        <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
        <dataContractSerializer maxItemsInObjectGraph="6553600" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="GiveWeb.Services.ShopBehavior"
        name="GiveWeb.Services.Shop">
      <endpoint address="" binding="basicHttpBinding" 
          bindingConfiguration="secureobjectbind" 
          contract="GiveWeb.Services.IShop">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="mex" binding="mexHttpsBinding" 
        contract="IMetadataExchange" />
    </service>
  </services>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <clear/>
      <add prefix="http://www.ushop2give.com"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>
</system.serviceModel>

シルバーライト クライアント

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IShop" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="Transport" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://web14.ai-host.com/Services/Shop.svc"
                binding="basicHttpBinding" 
                bindingConfiguration="BasicHttpBinding_IShop"
                contract="ShopSVC.IShop" name="BasicHttpBinding_IShop" />
        </client>
    </system.serviceModel>
</configuration>

それでもエラーが発生するのはなぜですか?


わかりました、ここに投稿の情報があります...

エラーが 1 つ見つかりました。バインディング オブジェクトの最初の宣言は、System.ServiceModel.BasicHttpBinding ではなく System.ServiceModel.Channels.Binding でした。そのため、オブジェクトの MaxReceivedMessageSize のプロパティが表示されませんでした。

これを修正し、プロキシを作成する関数を作成しましたが、戻りメッセージに 65536 バイトを超えるとエラー メッセージが表示されます。

     public static ShopSVC.ShopClient ShopClientProxy()
 {
     System.ServiceModel.EndpointAddress lxAddress = new System.ServiceModel.EndpointAddress(new Uri(Application.Current.Host.Source, "../Services/Shop.svc"));

     System.ServiceModel.BasicHttpBinding lxBinding = new System.ServiceModel.BasicHttpBinding(System.ServiceModel.BasicHttpSecurityMode.Transport);
     lxBinding.MaxReceivedMessageSize = 2147483647;
     lxBinding.MaxBufferSize = 2147483647;
     lxBinding.ReceiveTimeout = new TimeSpan(0, 5, 0);

     return new GiveSL.ShopSVC.ShopClient(lxBinding, lxAddress);
 }
4

4 に答える 4

1

サービスが ASP.NET でホストされている場合は、Web サーバーの最大要求長がそのサイズのメッセージを許可していることも確認する必要があります。例えば:

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="2147483647" />
  </system.web>
</configuration>
于 2010-01-29T18:21:45.383 に答える
0

OK、もう一度試してみましょう。Silverlight 2 の一部のバージョンでは ClientConfig が正しく読み取られなかったため、コードを使用してクライアント バインディングで MaxReceivedMessageSize を設定することで回避しました。おそらく、Silverlight 3 にも同様の問題があります。コードで MaxReceivedMessageSize を設定してみてください。http://forums.silverlight.net/forums/t/11313.aspxを参照してください。

于 2010-01-30T20:57:21.810 に答える
0

最後に解決策を...

2 つの根本的な問題がありました。

  1. クライアント側のバインディング オブジェクトが System.ServiceModel.Channels.Binding として誤って宣言されており、System.ServiceModel.BasicHttpBinding として宣言する必要がありました。したがって、上記の関数は、Silverlight クライアントでプロキシ オブジェクトを作成するための正しいコードです。
  2. サービス クライアントへの最初の呼び出しがアプリケーションによってキャッシュされる必要があります。この間ずっと私は解決策を模索してきましたが、バインディング呼び出しの 1 つだけを変更していましたが、それは私のプロジェクトで最初に呼び出されたものではありませんでした。プロキシ オブジェクトを作成するための中心的な関数を作成したとき、その中心的な関数を使用するようにすべてのコードを変更するまで、機能しませんでした。

すべてのコードでサービス クライアント プロキシを作成するために同じ関数を使用するようになったので、MaxReceivedMessageSize の設定は尊重され、すべて問題ありません。

うわー...それが来るのを見たことがない.

この件について私と付き合ってくれて、みんな (特にジェイコブ) に感謝します。

スティーブ

于 2010-02-12T17:57:23.053 に答える
0

私にはすべて問題ないように見えるので、これは単純なことなのだろうか。構成を変更しているサーバーは、Silverlight クライアントが指しているサーバーと同じhttps://web14.ai-host.com/Services/Shop.svcですか? また、まったく同じバインディング構成をサーバー構成からクライアントのバインディング構成に貼り付けてみることもできます。

于 2010-01-30T18:09:01.850 に答える