Я сделал простой клиент WCF и установил флажок «создать асинхронные методы». Что делают эти методы? - PullRequest
1 голос
/ 19 сентября 2009

Я создал сервер и сгенерировал мой клиент как асинхронный.

Поэтому, когда я подключаюсь, я делаю это асинхронно. Это нормально.

У меня есть метод на моем клиенте (метод обратного вызова), который получает данные с сервера. Сервер также отправляет эти данные асинхронным методом.

Чтобы получить эти данные на моем клиенте, я ожидал, что у меня будет ТОЛЬКО такой метод, который он сгенерировал для меня:

public void SendToClient(string dataToSend)
{
}

Хотя у него странное имя, я ожидал этого метода - он вызывается при получении данных.

Однако он также сгенерировал следующие методы:

public IAsyncResult BeginSendToClient(string dataToSend, AsyncCallback callback, object asyncState)
{
        throw new NotImplementedException();
}

public void EndSendToClient(IAsyncResult result)
{
    throw new NotImplementedException();
}

Я не знаю, как их использовать. Это как асинхронный прием или что-то в этом роде. Как бы я использовал их для получения данных?

1 Ответ

1 голос
/ 19 сентября 2009

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

Вы должны быть в состоянии избежать использования асинхронных версий на стороне сервера и просто заполнить синхронную версию. На стороне клиента (вызывающего контракт асинхронного обратного вызова) WCF должен поступить правильно, и за кулисами ваша синхронная версия будет вызвана, когда данные поступят на ваш конец.

В качестве sidenote, кажется, что клиент сообщил об этом как об ошибке, но похоже, что она не была устранена: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=293507

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