Передача прокси-объекта как asyncState в WCF
-
06-07-2019 - |
Вопрос
У меня есть клиент WCF (С#), который взаимодействует с сервером 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 при других невыполненных асинхронных вызовах.
Решение
Это должно работать нормально.Альтернативой является использование лямбда-выражения или анонимного делегата, чтобы вы могли использовать ту же локальную переменную в своем завершенном коде.
Пример использования лямбда-выражения
client.BeginLogin(user, pass,
ar =>
{
LoginResult result = client.EndLogin(ar);
Console.WriteLine(result);
}, null);