2

私のWCFサービス契約は、次のような方法で行う必要があります。

    [OperationContract]
    string GetFile(int id);

    [OperationContract]
    void UploadFile(int id, string text);

GetFileはファイルのテキストを返し、UploadFileはファイルのコンテンツをサーバーに送信します。

ファイルのサイズが約数MB(私の場合は4.37 MB)の場合、奇妙な動作があります。GetFileは正常に機能し、クライアントは問題なく長いテキストを取得しますが、UploadFileは同じファイルをサーバーに送信できません。このメソッドの実行中にクライアントがフリーズし、操作が終了しないようです。数分待っていたのですが、結果が出ず、強制的にクライアントを停止しました。

それで、私の質問は、そのような転送の方向に違いはありますか?大きなファイルをサーバーに送信するために使用する必要があるWCFストリーミングについて知っているので、それを使用してコードを変更します。サーバーが同じサイズのデータ​​を正しく返すのに、ファイルがサーバーに転送された場合にのみ問題が発生するのはなぜですか?

アップデート。UploadFileは、成功したかどうかを知る必要があるため、OneWay操作であってはなりません。実行はサーバーを豊かにしません。サーバー側にブレークポイントを設定しましたが、起動しません。

4

2 に答える 2

2

サーバーとクライアントの両方で maxReceivedMessageSize とリーダーのクォータを既に構成していると思います。そうしないと、そのような大きなメッセージを送信できないはずです。IIS で WCF サービスをホストしていますか? HTTP ランタイムには、4MB という独自の制限があります。これは、configuration/system.web/httpRuntime/@maxRequestLength で変更できます (値は KB 単位です)。なぜ例外を受け取らないのだろうか。

于 2010-08-19T09:37:59.737 に答える
1

クライアントが単にUploadFileが戻るのを待っている可能性はありますか?

できることの 1 つは、別のスルーで UploadFile メソッド呼び出しを起動して、UI スレッドをブロックしないようにすることです (話しているクライアントが GUI アプリであると仮定します)。

クライアントがサーバーの応答を待たないように、OperationContract を に設定する価値があるかもしれUploadFileません。[OperationContract(IsOneWay = true)]の戻り値の型UploadFileが void であっても、 が true に設定されていない限り、サーバーは空のメッセージで応答しIsOneWayます。ただし、Ladislav が述べたように、そうすると、起動して忘れる動作が得られ、呼び出しの処理中にサーバーが例外かどうかを確認できません。

于 2010-08-19T12:53:07.903 に答える