Мне нужно вызвать некоторые функции в веб-сервисе 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()
Конечно, потому что вы просто вызываете метод (HelloWorld) класса, как и любой другой (от перспектива компилятора, не имеет значения, является ли его базовый класс веб-службой). Используйте threadpool, чтобы вызывать его асинхронно (или Задачи, если .NET 4+) –
Для получения дополнительной информации о выполнении асинхронных веб-сервисов см. Эту ссылку http://www.codeproject.com/Articles/121345/Asynchronous-Communication-in-a-WCF -Обслуживание –