J'ai besoin de conseils sur la meilleure façon de créer un wrapper de proxy client WCF pour le client ASP .NET. Je veux travailler aussi bien avec le contrôle ObjectDataSource sans codage supplémentaire et aussi quand j'ai besoin d'appeler manuellement le service WCF pour obtenir des données. J'ai fondamentalement trouvé deux modèles, mais j'aimerais savoir lequel est le plus efficace.Proxy client WCF pour client ASP .NET
Voici la première enveloppe client
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);
}
}
est une autre enveloppe de WCF maintenant ici.
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);
}
}
}
Dans le premier exemple, il n'y a qu'une seule instance du proxy client et il peut être réutilisé entre les différentes méthodes, mais la classe a besoin de mettre en œuvre IDisposable
afin que la procuration peut être mis au rebut correctement par le client. Dans le second exemple, il existe un proxy client par méthode et le client n'a pas à se soucier de disposer du proxy.
La réutilisation de proxy entre différentes méthodes est-elle une bonne solution? Les performances sont-elles atteintes lorsque vous ouvrez/fermez le proxy WCF? (Dans les deux exemples, supposons que ChannelFactory sont mises en cache et nouveau canal est créé à chaque fois via la méthode cached_factory.CreateChannel().)
Par exemple, avec la première enveloppe que je peux faire quelque chose comme:
using (Facade1 facade = new Facade1())
{
facade.GetData()
...
...
facade.GetMoreData()
}
Dans le second exemple, je peux juste instancier ma façade et appeler les méthodes nécessaires sans me soucier de disposer d'un proxy.
Merci à l'avance,
Eric
J'allais créer un assemblage séparé pour le premier wrapper ou le second wrapper, selon celui que je choisirais. Y a-t-il un problème avec le partage d'un wrapper dans le premier modèle? Maintenant, pour les problèmes de performances, le service est hébergé sur Windows 2003 avec wis/IIS6, donc j'utilise basicHttpBinding, mais à l'avenir, nous pouvons mettre à jour vers Windows Server 2008 et l'héberger dans IIS7 où je peux utiliser netTcpBinding avec WAS IIS7. J'aime un peu le premier modèle où le proxy est partagé entre les méthodes. Le seul inconvénient est que le client doit se souvenir de disposer de l'emballage correctement. – Eric