2012-05-10 10 views
1

How to: Implement an Asynchronous Service OperationBuilding Task Based WCF Services with Task Parallel Libraryに触発されて、非同期に実行される操作でWCF Webサービスを作成しようとしています。非同期WCFサービスの実行がブロックされています

アイデアは、Webページのボタンで呼び出された秒から1分の間持続するメソッドを持っていて、最終的には同じサービスの別のメソッドを呼び出すタイマーがあるということです非同期操作のステータスを返します(動作しているかどうか)。

私はダミーの例を設定しました。私の非同期操作は実際にWeb Serivceをブロックします。

[ServiceContract(Namespace = "")] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class Service1 
{ 
    [OperationContract(AsyncPattern = true, Action = "TestServiceMethod", Name = "TestServiceMethod", ReplyAction = "TestServiceMethodReply")] 
    public IAsyncResult BeginTestServiceMethod(string request, AsyncCallback callback, object asyncState) 
    { 
     var task = new Task<string>((state) => 
     { 
      SpinWait.SpinUntil(() => { return false; }, 5000); 
      return request; 
     }, asyncState); 

     task.ContinueWith((t) => { callback(t); }); 
     task.Start(); 

     return task; 
    } 

    public string EndTestServiceMethod(IAsyncResult result) 
    { 
     var task = (Task<string>)result; 
     return task.Result; 
    } 

    [OperationContract] 
    public string OtherTest() 
    { 
     return "OtherTest"; 
    } 
} 

、これは私のページではJavaScriptをある

function Click() { 
    var service = new Service1(); 
    service.TestServiceMethod("Dummy", PopWord); 
    service.OtherTest(PopWord); 
} 

function PopWord(word) { 
    alert(word); 
} 

結果は、私はボタンをクリックしたときに5秒続く、待っている」(クリック機能は、ボタンをクリックすることによって活性化されます) Dummy "と" OtherTest "が連続してポップします。予想される動作は、 "Dummy"を5秒後にポップする "OtherTest"です。

誰かが私が間違っていることを見つけたり、別の方法を提案したりすることはできますか?

答えて

2

私はあなたがIIS上ではなく、cassini(開発サーバー)で動作していると思いますか?

もしそうなら、私はcassiniがリクエストを並行して実行できないと言っている人がかなりいます。

私はこの文書をマイクロソフトから見つけることはできませんが、以下のようなスタックオーバーフローに関する記事がかなりあります。私は実際に

ASP.NET Development Server concurrent processing doesn't work

ASP.NET Dev Server (Cassini), IIS Express and multiple threads

+0

。私は今夜​​IIS上でそれを実行しようとすると、それがどのように行ったか教えてあげます。ありがとう。 – Vache

+0

運がよろしいですか?決定的なものを得ることは素晴らしいことでしょう。 –

+0

すみません。私はWindowsの再インストールが必要な問題を抱えていました。だから実際にDev Serverは問題の一部だったようですが、今は別のものがあります。私のボタン(またはonClickイベントのテキストリンク)をクリックしても動作しませんが、私のアドレスバーに 'javascript:Click()'と入力すれば非同期動作が期待できます。なぜこれが起こるのかの手がかりはありますか? – Vache

関連する問題