0

前提条件

  • サービス プロジェクト タイプ: .net 3.5 クラス ライブラリ
  • サービスホスト: IIS 7.5 / ASP.NET 互換モードがオンになっています

サービスに定義された単一のアクションDocumentsServiceUploadDocument(Stream stream)、HTTP ( webHttp binding ) 経由でアクセスできます。

で飾ってみました[OperationContract(IsOneWay=true)]

[OperationContract(IsOneWay=true)]
[WebInvoke(Method="POST", UriTemplate="upload", ResponseFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Bare)]
void UploadDocument(System.IO.Stream stream);

さらに、次の行をコメントアウトしました。

WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;

サービス自体が 200 のステータスを設定するため、すべてが問題ないため、役に立たないと思ったからです。

サービス用に生成されたWCFクライアントは使用しません。ファイルを送信するには、プレーンなajaxリクエストを使用します。

問題

これは、ファイア アンド フォーゲット リクエストではありません。同期とブロックです。どうすれば本当のファイア アンド フォーゲット アクションを実行できますか? C#プロキシ クライアントなしで使用できますか?

編集

  1. クラスを使用できませんTask。.net Framework 3.5 にバインドされています。
  2. さて、私には 2 つの部分があります:アップロード自体後処理です。ファイルがアップロードされたときに、このパーツをチェーンするか、非同期後処理をインスタンス化するにはどうすればよいですか?
4

1 に答える 1

1

単純にスレッドプールのワーカー スレッドを使用してリクエストを送信しないのはなぜですか?

例:

Task.Factory.StartNew(() => UploadDocument(my_stream));

.NET 3.5 の場合、次のようにスレッド プールに直接アクセスできます。

ThreadPool.QueueUserWorkItem(o => UploadDocument(my_stream));

アップロードの完了後に何かをしたい場合は、次のようにします。

ThreadPool.QueueUserWorkItem(o =>
{
    UploadDocument(my_stream);

    DoSomePostProcessing();
});

UploadDocumentは同期メソッドであるため、完了DoSomePostProcessing後に実行されUploadDocumentます。DoSomePostProcessingこの場合、バックグラウンド スレッドでも実行されます。

于 2015-09-21T22:18:34.590 に答える