2013-09-05 4 views
0

Мне нужно вызвать некоторые функции в веб-сервисе C# после возвращения результата пользователю, поэтому я намерен использовать метод OneWay.Call Asynchronous webservice в C#

Я создал 2 WebServices на одном проекте следующим образом: 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) класса, как и любой другой (от перспектива компилятора, не имеет значения, является ли его базовый класс веб-службой). Используйте threadpool, чтобы вызывать его асинхронно (или Задачи, если .NET 4+) –

+0

Для получения дополнительной информации о выполнении асинхронных веб-сервисов см. Эту ссылку http://www.codeproject.com/Articles/121345/Asynchronous-Communication-in-a-WCF -Обслуживание –

ответ

1

Вы можете запустить отдельный поток выбрал из пула потоков, начав новую задачу с помощью метода:

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