WCF Image Upload Serviceを同期ではなく非同期にする方法を教えてください。私のSaveImage
関数は、非同期の JavaScript 呼び出しから直接呼び出されます。
コントラクト (IImageWCFService.cs):
[ServiceContract(Namespace = "MyServices.org")]
public interface IImageWCFService
{
[OperationContract(AsyncPattern = true)]
[WebInvoke(Method = "POST", ResponseFormat=WebMessageFormat.Json, UriTemplate="SaveImage")]
void SaveImage(Stream stream);
}
サービス (ImageWCFService.svc.cs) :
public void SaveImage(Stream stream)
{
// long running task up manipulating the image
// some lines of code contains image upload to Amazon S3 functions
}
これは一方向の呼び出しである必要があるため、void を返します。ユーザーは関数から結果を取得したり、関数が成功したかどうかを取得したりする必要はありません。
現在、この WCF サービスが実行されると、メイン スレッドが消費されます。非同期で実行したい。推奨される方法は次を使用することです。
[OperationContract(AsyncPattern = true)]
またはWCF のタスクベースの非同期パターン。
私は多くの記事を読みましたが、関数に実装する方法がまだ非常に混乱しています。イメージ アップロード機能の実装を示すコード例が必要です。
注:この質問のさまざまな非同期実装の違いに関する良い情報源- これを実装する最良の方法は、 WCF のタスクベースの非同期パターンを使用することです。
繰り返しますが、呼び出しは JavaScript から直接行われますが、必要に応じてサーバー側で WCF サービスを呼び出す保存サーバーの Web サービス (asmx) を作成しても問題ありませんが、すべてについて混乱しています。これ。
ありがとう。