Передача прокси-объекта как asyncState в WCF - PullRequest
1 голос
/ 23 октября 2009

У меня есть клиент WCF (C #), который взаимодействует с сервером WCF. Это клиенты делают звонки асинхронно. Мне интересно, является ли следующая идея хорошей или плохой:

При вызове асинхронной операции от моего клиента WCF я устанавливаю переменную объекта asyncState в прокси-объект. В моей функции обратного вызова я извлекаю прокси-объект из значения AsyncState и вызываю .EndFunction для него.

Пример:

public void Login()
{
   Client client = CreateWCFProxy();
   client.BeginLogin(user, pass, OnLoginCompleted, client);
}

public void OnLoginCompleted(IAsyncResult result)
{
   Client client = result.AsyncState as Client;
   LoginResult loginResult = client.EndLogin(result);
}

Я мог бы хранить Клиента как члена класса, но если я делаю много одновременных асинхронных вызовов, которые могут усложниться. (Например, если прокси-сервер умирает, когда я выполняю один асинхронный вызов, мне нужно создать новый прокси-сервер. Но мне все еще нужно, чтобы старый прокси-сервер мог вызывать .EndFunction для других ожидающих асинхронных вызовов.

1 Ответ

3 голосов
/ 23 октября 2009

Это должно работать просто отлично. Альтернативой является использование лямбда-выражения или анонимного делегата, чтобы вы могли использовать ту же локальную переменную в вашем законченном коде.

Пример использования лямбда-выражения

client.BeginLogin(user, pass,
    ar =>
    {
        LoginResult result = client.EndLogin(ar);
        Console.WriteLine(result);
    }, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...