0

NET 4 クライアント アプリケーションから接続している NET 4 WCF サービス (リモート サーバー内) があります。サービスはコールバックを実装し、クライアント アプリケーションはメソッドを正常に呼び出してコールバックを受け取ることができます。完璧。

ここで、WCF サービスがホストされている (スタンドアロン) リモート サーバーに実行可能ファイル (および構成) をコピーすると、アプリケーションはメソッドを正常に実行できますが、コールバックを受信することはありません!

また、開発用 PC の仮想マシンからアプリケーションを実行してみました。サービスに接続してメソッドを実行することはできましたが、もう一度コールバックを受け取ることはありません!

私は究極のテストを試みました。同時に 3 つの場所すべてでアプリケーションを実行しました。3 つすべてが正常に初期化され、サービスのメソッドが正常に呼び出されますが、イベントがトリガーされるとすぐに、私の開発 PC だけがコールバックを受け取ります! 他の二人は沈黙する。3 つのアプリはすべて 1 つの共有フォルダーから開始されたため、同じコードを効果的に実行し、同じ構成に依存しています。

コールバックを受信する唯一の開発用 PC は何ですか? 手がかりは大歓迎です。これが誰かに鐘を鳴らしてくれることを願っています。

[アップデート]

トレースを有効にした後、次の例外が見つかりました。一部の内部バッファ制限に達したようです。それを修正する方法がわかりません。これらは app.config: からの現在の制限の一部ですmaxBufferPoolSize="16384000" maxReceivedMessageSize="16384000"

メッセージを逆シリアル化しようとしているときにフォーマッタが例外をスローしました: パラメータhttp://tempuri.org/:resultを逆シリアル化しようとしているときにエラーが発生しました。InnerException メッセージは、「MatchResult 型のオブジェクトのデシリアライズ中にエラーが発生しました。XML データの読み取り中に、最大配列長のクォータ (16384) を超えました。このクォータは、XML リーダーの作成時に使用される XmlDictionaryReaderQuotas オブジェクトの MaxArrayLength プロパティを変更することで増やすことができます。詳細については、InnerException を参照してください。

4

1 に答える 1

1

MaxArrayLength でグーグルすると、これがうまくいくように見えることが明らかになりました。これが誰かを助け、彼らが何時間も怒ってしまうのを防ぐことを願っています.

ブログがダウンした場合に備えて、重要な部分を引用しています。

<binding name="MaintenanceServiceBindingConfiguration">
  <binaryMessageEncoding>
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
  </binaryMessageEncoding>
  <httpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" />
</binding>
于 2013-02-07T16:29:39.377 に答える