62 lines
1.3 KiB
C#
62 lines
1.3 KiB
C#
using System;
|
|
using System.ServiceModel;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Aitex.Core.WCF;
|
|
|
|
public class WCFProxy
|
|
{
|
|
public static void Using<T>(Action<T> action)
|
|
{
|
|
var factory = new ChannelFactory<T>("*");
|
|
var client = (IClientChannel)factory.CreateChannel();
|
|
try
|
|
{
|
|
action((T)client);
|
|
client.Close();
|
|
factory.Close();
|
|
}
|
|
catch (CommunicationException e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
catch (TimeoutException e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static async Task AsyncUsing<T>(Func<T, Task> action)
|
|
{
|
|
var factory = new ChannelFactory<T>("*");
|
|
var client = (IClientChannel)factory.CreateChannel();
|
|
try
|
|
{
|
|
await action((T)client);
|
|
client.Close();
|
|
factory.Close();
|
|
}
|
|
catch (CommunicationException e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
catch (TimeoutException e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
client.Abort();
|
|
throw;
|
|
}
|
|
}
|
|
} |