using MeTenWechat.WcappAPIServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Web;
namespace MeTenWechat.Util
{
public class ProxyManager
{
#region 单例
private ProxyManager() { }
private static ProxyManager _instance = null;
static object obj = new object();
public static ProxyManager Instance
{
get
{
if (_instance == null)
{
lock (obj)
{
if (_instance == null)
{
_instance = new ProxyManager();
}
}
}
return _instance;
}
}
private ESBAPIServiceI _minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
public ESBAPIServiceI EmeProxy
{
get
{
return _minEmeProxy;
}
}
#endregion
/// <summary>
/// 服务异常状态集合
/// </summary>
CommunicationState[] _communicationStates = new CommunicationState[] { CommunicationState.Closed, CommunicationState.Closing, CommunicationState.Faulted };
/// <summary>
/// 服务调用
/// 说明:利用委托调用代理方法,能实现代理与异常的统一管理
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="action"></param>
/// <returns></returns>
public T Invoke<T>(Func<ESBAPIServiceI, T> action)
{
var communicationState = _minEmeProxy as ICommunicationObject;
//判断服务状态是否异常
if (_communicationStates.Contains(communicationState.State))
{
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
try
{
//调用远程代理方法
var result = action.Invoke(_minEmeProxy);
return result;
}
catch (CommunicationException cex)
{
var method = action.Method;
//TODO:日志记录某某方法调用导致通讯异常,并重新创建代理
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
catch (Exception ex)
{
//TODO:记录日志,并重新创建代理
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
return default(T);
}
/// <summary>
/// 测试方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TestMethod()
{
//Dictionary<string, int> dic = new Dictionary<string, int>();
//dic.Add("1", 1997);
//var request = JSONHelper.Seriallize(dic);
string request="";
ProxyManager.Instance.Invoke<string>(g => g.BusiEMEGetUserInfoByPhone(request));
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Web;
namespace MeTenWechat.Util
{
public class ProxyManager
{
#region 单例
private ProxyManager() { }
private static ProxyManager _instance = null;
static object obj = new object();
public static ProxyManager Instance
{
get
{
if (_instance == null)
{
lock (obj)
{
if (_instance == null)
{
_instance = new ProxyManager();
}
}
}
return _instance;
}
}
private ESBAPIServiceI _minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
public ESBAPIServiceI EmeProxy
{
get
{
return _minEmeProxy;
}
}
#endregion
/// <summary>
/// 服务异常状态集合
/// </summary>
CommunicationState[] _communicationStates = new CommunicationState[] { CommunicationState.Closed, CommunicationState.Closing, CommunicationState.Faulted };
/// <summary>
/// 服务调用
/// 说明:利用委托调用代理方法,能实现代理与异常的统一管理
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="action"></param>
/// <returns></returns>
public T Invoke<T>(Func<ESBAPIServiceI, T> action)
{
var communicationState = _minEmeProxy as ICommunicationObject;
//判断服务状态是否异常
if (_communicationStates.Contains(communicationState.State))
{
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
try
{
//调用远程代理方法
var result = action.Invoke(_minEmeProxy);
return result;
}
catch (CommunicationException cex)
{
var method = action.Method;
//TODO:日志记录某某方法调用导致通讯异常,并重新创建代理
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
catch (Exception ex)
{
//TODO:记录日志,并重新创建代理
_minEmeProxy = new WcappAPIServer.ESBAPIServiceIClient();
}
return default(T);
}
/// <summary>
/// 测试方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TestMethod()
{
//Dictionary<string, int> dic = new Dictionary<string, int>();
//dic.Add("1", 1997);
//var request = JSONHelper.Seriallize(dic);
string request="";
ProxyManager.Instance.Invoke<string>(g => g.BusiEMEGetUserInfoByPhone(request));
}
}
}