一个简单的WCF通用请求类



public static class ServiceRequester<T>
{
private static IDictionary<string, ChannelFactory<T>> _channelPool= new Dictionary<string, ChannelFactory<T>>();

private static object ayncLock = new object();
static private ChannelFactory<T> GetChannelFactory(string endPointName)
{
lock (ayncLock)
{
string cacheName = endPointName;
if (string.IsNullOrEmpty(endPointName))
{
cacheName = typeof(T).Name;
}
ChannelFactory<T> _factory = null;
_channelPool.TryGetValue(cacheName, out _factory);
if (_factory == null)
{
_factory = new ChannelFactory<T>(endPointName);
_channelPool.Add(endPointName, _factory);
}
return _factory;
}
}
static public void Request(string endPointName, Action<T> action)
{
IClientChannel proxy = null;
try
{
lock (ayncLock)
{
proxy = GetChannelFactory(endPointName).CreateChannel() as IClientChannel;
proxy.Open();
action((T)proxy);
proxy.Close();
}
}
catch (CommunicationException communicationException)
{
if (proxy != null)
{
proxy.Abort();
}
throw communicationException;
}
catch (TimeoutException timeoutException)
{
if (proxy != null)
{
proxy.Abort();
}
throw timeoutException;
}
catch (Exception ex)
{
if (proxy != null)
{
proxy.Abort();
}
throw ex;
}
}
}



Usage:


ServiceRequester<ICalculateService>.Request("*", delegate(ICalculateService proxy)
{
proxy.Add(1, 4,1);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值