Мне нужны советы о том, как лучше всего создать прокси-оболочку для клиента WCF для клиента ASP .NET. Я хочу одинаково хорошо работать с элементом управления ObjectDataSource без дополнительного кодирования, а также когда мне нужно вручную вызвать службу WCF, чтобы получить некоторые данные. Я в основном придумал две модели, но я хотел бы знать, какая из них более эффективна.
Вот первая клиентская оболочка
public class Facade1 : IDisposable
{
private readonly IClient proxy = ClientProxyFactory.GetObject<IClient>();
public List<string> GetData()
{
proxy.GetData()
}
public List<string> GetMoreData()
{
proxy.GetMoreData()
}
public void Dispose()
{
ClientProxyFactory.CloseChannel(this.proxy);
}
}
Теперь вот еще одна оболочка WCF.
public class Facade2
{
public List<string> GetData()
{
IClient proxy = ClientProxyFactory.GetObject<IClient>();
try
{
return client.GetData();
}
finally
{
ClientProxyFactory.CloseChannel(proxy);
}
}
public List<string> GetMoreData()
{
IClient proxy = ClientProxyFactory.GetObject<IClient>();
try
{
return client.GetMoreData();
}
finally
{
ClientProxyFactory.CloseChannel(proxy);
}
}
}
В первом примере есть только один экземпляр клиентского прокси, и его можно повторно использовать между различными методами, но класс должен реализовать IDisposable
, чтобы клиент мог правильно расположить прокси. Во втором примере есть один клиентский прокси на метод, и клиент не беспокоится об утилизации прокси.
Является ли повторное использование прокси между разными методами хорошим способом? Есть ли снижение производительности при открытии / закрытии прокси WCF? (В обоих примерах предположим, что ChannelFactory кэшируется и каждый раз создается новый канал с помощью метода cached_factory.CreateChannel ().)
Например, с первой оберткой я могу сделать что-то вроде:
using (Facade1 facade = new Facade1())
{
facade.GetData()
...
...
facade.GetMoreData()
}
Во втором примере я могу просто создать экземпляр своего фасада и вызвать необходимые методы, не беспокоясь об утилизации прокси.
Заранее спасибо,
Эрик