WCF客户端体系结构最佳实践:广义错误处理

时间:2019-04-09 08:00:47

标签: c# wcf

我正在为一个项目开发前端移动应用程序。后端由其他人处理。在整个应用程序中,我向服务器请求信息。

我使用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个窗口)
  • 这些做法还可以吗?有更好的解决方案吗?

0 个答案:

没有答案