static void Invoke<TContract>(TContract proxy, Action<TContract> action)
{
try
{
action(proxy);
(proxy as ICommunicationObject).Close();
}
catch (CommunicationException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (TimeoutException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (Exception)
{
//Handle Exception
(proxy as ICommunicationObject).Close();
}
}
static TReturn Invoke<TContract, TReturn>(TContract proxy, Func<TContract, TReturn> func)
{
TReturn returnValue = default(TReturn);
try
{
returnValue = func(proxy);
}
catch (CommunicationException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (TimeoutException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (Exception)
{
//Handle Exception
}
return returnValue;
}
{
try
{
action(proxy);
(proxy as ICommunicationObject).Close();
}
catch (CommunicationException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (TimeoutException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (Exception)
{
//Handle Exception
(proxy as ICommunicationObject).Close();
}
}
static TReturn Invoke<TContract, TReturn>(TContract proxy, Func<TContract, TReturn> func)
{
TReturn returnValue = default(TReturn);
try
{
returnValue = func(proxy);
}
catch (CommunicationException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (TimeoutException)
{
(proxy as ICommunicationObject).Abort();
//Handle Exception
throw;
}
catch (Exception)
{
//Handle Exception
}
return returnValue;
}