0

次のエラーが表示されます。

The maximum message size quota for incoming messages (65536) has been exceeded.
To increase the quota, use the MaxReceivedMessageSize property on
the appropriate binding element.
  1. REST サービスを使用する WebhttpBinding を使用しています。
  2. クライアント側からの構成設定はありません。
  3. MVC3 アプリケーションを使用しています。

65536 バイトを超えるストリームのヘルプが必要です。

MaxReceivedMessageSize プロパティを 2GB に設定できるように ServiceHostFactory の動作を編集する方法はありますか


ご返信ありがとうございます。

私は WebHttpBinding を使用しているので、 ServiceHostFactory をオーバーライドする方法を知りたいです。

カスタム クラスを作成し、WebServiceHost の OnOpening() メソッドをオーバーライドすると、問題を解決できますか?

4

2 に答える 2

1

MaxReceivedMessageSizeバインディング要素のプロパティです。デフォルトから変更する必要がある場合は、次の 2 つのオプションがあります。

  1. 構成ファイルを使用して、binding要素内から設定します。
  2. コードでバインディングを作成し、そこでプロパティを設定します。

構成ファイルを使用せずにクライアント側でこれを行うには、通常のサービス参照コードをバイパスして、自分でクライアント チャネルを作成する必要があります。これを行う方法の例は、自動生成されたクライアント プロキシを使用しない WCF の使用に関する私のブログ投稿、Proxy-Free WCF で確認できます。本質的に、コードで次のようなことを行います。

var binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;

var factory = new ChannelFactory<IServiceInterfaceChannel>(binding);
var client = factory.CreateChannel(new Endpoint(SERVICE_URL));

サービス側で動作を変更する必要がある場合はAddServiceEndpoint、サービス ホスト クラスを呼び出してバインディングを指定できます。次に例を示します。

var host = new WebServiceHost();
var binding = new WebHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;

host.AddServiceEndpoint(typeof(IServiceInterface), binding, SERVICE_URL);

また、質問のとおり、カスタム Web サービス ホストのメソッドをオーバーライドすることで、これを達成できると思います。OnOpeningベースOnOpeningビヘイビアーはエンドポイントを作成し、バインディング ビヘイビアーを編集する可能性があることに注意してください。そのため、バインディング構成を自分で変更する前に、最初にすべてを実行させたいと思うでしょう。しかし、なぜあなたがそんなに面倒なことをするのか、私にはよくわかりません...

于 2012-05-20T03:36:53.567 に答える