Асинхронный вызов WCF приводит к тупику?C#

Место общения программистов C#
Ответить
Anonymous
 Асинхронный вызов WCF приводит к тупику?

Сообщение Anonymous »

У меня есть контракт WCF с одним синхронным методом и одним асинхронным методом, определенным и реализованным как:

Код: Выделить всё

[ServiceContract]
public interface IFooService
{
[OperationContract]
string GetFoo(int value);

[OperationContract]
Task GetBarAsync();
}

public class FooService : IFooService
{
public string GetFoo(int value)
{
return value.ToString();
}

public Task GetBarAsync()
{
return Task.Run(() =>
{
Task.Delay(6000).Wait();
return "done!";
});
}
}
На стороне клиента у меня есть консольная программа:

Код: Выделить всё

class Program
{
public static async Task Main(string[] args)
{
NetNamedPipeBinding binding = new NetNamedPipeBinding();
var proxy = new ChannelFactory(binding, new EndpointAddress("net.pipe://localhost/Test")).CreateChannel();

Console.WriteLine("GetFoo result: " + proxy.GetFoo(1));
var tmp = await proxy.GetBarAsync();
Console.WriteLine("GetBarAsync result: " + tmp);
Console.WriteLine("GetFoo result: " + proxy.GetFoo(2));
Console.ReadLine();
}
}
Он вывел результат GetFoo: 1, подождал 6 секунд, а затем вывел результат GetBarAsync: готово!, пока все ожидаемо. Однако он просто зависает и никогда не выводит последнюю строку, которая является результатом GetFoo: 2.
Может кто-нибудь объяснить, почему? Это тупик? Или канал WCF не поддерживает асинхронные вызовы?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -dead-lock
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»