Проблема WCF после двух асинхронных вызовов одновременно - PullRequest
2 голосов
/ 05 февраля 2011

Я пытаюсь подключить свое приложение к Azure с ролью wcf. Все работает нормально, пока я не вызову более одного метода wcf одновременно. Я думаю, что это потому, что потоки. Исключение составляет:

Не было прослушивания конечной точки на http://localhost:57579/Service1.svc, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если имеется, для получения более подробной информации.

Я искал, как добавить поток в службу wcf, и нашел это:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]

или

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall]

Я пытался объединить это свойство, но оно не работает: (

это мой простой код: Клиент:

public MainPage()
{
     InitializeComponent();
     service = new Service1Client();
     service.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted); 

     service.GetDataAsync(1);
     service.GetDataAsync(2);
}

void getDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    if (e.Error != null)
    {

    }
    else
    {
        this.textBlock1.Text = e.Result;
    }
}

Сервер:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
} 

1 Ответ

1 голос
/ 08 февраля 2011

Мне кажется, проблема в том, что вы используете один и тот же клиент для выполнения двух операций одновременно. Вы пытались раскрутить двух клиентов и попросить каждого из них выполнить операцию?

public MainPage()
{
    InitializeComponent();

    service1 = new Service1Client();
    service1.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted); 

    service1.GetDataAsync(1);

    service2 = new Service1Client();
    service2.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(getDataCompleted); 

    service2.GetDataAsync(2);

}

Обратите внимание, что существуют другие способы выполнения асинхронных вызовов, которые не потребуют столько усилий при подписке / отписке обработчиков событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...