2013-09-05 230 views
0

我需要在將結果返回給用戶後調用C#web服務中的一些函數,因此我打算使用OneWay方法。在c中調用異步web服務#

我創造了在同一項目2個web服務如下: 1:主叫服務:

public class Caller : System.Web.Services.WebService { 

[WebMethod] 
public string HelloWorld() { 

    var bg = new Background(); 
    bg.HelloWorldBG(); 
    return "Hello World"; 
} 
} 

第二服務在後臺調用:

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required)] 
public class Background : System.Web.Services.WebService { 

[SoapDocumentMethod(OneWay = true)] 
[WebMethod(EnableSession = true)] 
public void HelloWorldBG() 
{ 
    Thread.Sleep(60000); 
    var file = @"D:\testHello.txt"; 
    File.WriteAllText(file, "Hello World"); 
}  

}

但是當我調用HelloWorld()時,它在完成HelloWorldBG()的執行之前不會返回()

+1

當然,因爲你只是打電話像任何其他類的方法(的HelloWorld)(從編譯器的角度來看,它的基類是否是Web服務並不重要)。使用線程池異步調用它(或.NET 4+以上的任務) –

+0

有關執行異步Web服務的所有詳細信息,請參閱此鏈接http://www.codeproject.com/Articles/121345/Asynchronous-Communication-in-a-WCF -服務 –

回答

1

你可以運行一個單獨的線程的線程池挑出通過啓動一個新的任務與方法:

var bg = new Background(); 
Task.Factory.StartNew(bg.HelloWorldBG); 
return "Hello World";