Я работаю над внешним мобильным приложением для проекта. Серверная часть обрабатывается кем-то другим. На протяжении всего моего приложения я делаю запросы к серверу для информации.
Я использую svcutil.exe для получения автоматически сгенерированного клиентского прокси. В настоящее время я использую глобальный одноэлементный сервис для предоставления прокси (чтобы один и тот же прокси использовался во всем приложении для вызовов сервера).
Поскольку мне нужно делать аналогичную вещь всякий раз, когда я делаю серверный вызов, я использую класс для обобщения того, что я должен сделать.
// Pseudocode
T Call<T>(Expression<Func<T>> myMethod){
// check internet connection (return if no internet)
// check proxy state and open it if necessary
// surround call with try catch
// if caught exception, report to online logging service
}
// called something like this
ExampleService _proxy;
var serverValue = wcfCallManager.Call( () =>
_proxy.GetValue(userInfo, stringQuery, settings) );
Я недавно заглянул в WCF и нашел:
В моей голове новый код будет выглядеть так:
public string PerformQuery(string query, string url){
//checks if proxy with url exists and sends that or creates a new one
var proxy = _proxyGetter.GetProxy(url);
//performs query with error handling/logging
var queryResult = wcfCallManager.Call( () =>
proxy.GetValue(userInfo, stringQuery, settings));
// translates queryResult into usable format.
return _wcfDataFormatter.FormatQueryResult(queryResult);
}
Итак, мои вопросы:
- Где я могу закрыть канал прокси? (некоторые вызовы могут быть одновременными или вызовы могут быть частью большой партии вызовов, поэтому я не хочу закрывать канал во время выполнения другого вызова. Также я не хочу постоянно закрывать / открывать, потому что это сделает его медленный)
- Как отобразить сообщения об ошибках для пользователя? (обработка ошибок только журналы, я действительно не хочу, чтобы у пользователя было 15 всплывающих окон, когда мои 15 асинхронных вызовов терпят неудачу одновременно)
- Эти практики вообще в порядке? Есть ли лучшее решение?