How to: Implement an Asynchronous Service OperationとBuilding 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"です。
誰かが私が間違っていることを見つけたり、別の方法を提案したりすることはできますか?
。私は今夜IIS上でそれを実行しようとすると、それがどのように行ったか教えてあげます。ありがとう。 – Vache
運がよろしいですか?決定的なものを得ることは素晴らしいことでしょう。 –
すみません。私はWindowsの再インストールが必要な問題を抱えていました。だから実際にDev Serverは問題の一部だったようですが、今は別のものがあります。私のボタン(またはonClickイベントのテキストリンク)をクリックしても動作しませんが、私のアドレスバーに 'javascript:Click()'と入力すれば非同期動作が期待できます。なぜこれが起こるのかの手がかりはありますか? – Vache