2009-05-06 6 views
3

J'ai écrit une classe de liaison personnalisée qui hérite de CustomBinding. Ma classe personnalisée remplace la méthode BuildChannelFactory et utilise une ChannelFactory personnalisée pour créer une chaîne personnalisée.Configuration WCF CustomBinding

J'ai des difficultés à utiliser la classe de liaison personnalisée dans le client WCF. Je suis en mesure d'utiliser ma classe personnalisée de liaison si je configure dans le code:

Binding myCustomBinding = new MyCustomBinding(); 

ChannelFactory<ICustomerService> factory = 
    new ChannelFactory<ICustomerService>(myCustomBinding, 
     new EndpointAddress("http://localhost:8001/MyWcfServices/CustomerService/")); 

ICustomerService serviceProxy = factory.CreateChannel(); 
serviceProxy.GetData(5); 

Mon problème est que je ne sais pas comment le configurer dans le fichier App.config. S'agit-il d'un élément customBinding ou d'un élément bindingExtension? Est-ce autre chose?

Répondre

5

Lorsque vous avez créé votre liaison personnalisée dans le code, avez-vous également implémenté un "YourBindingElement" (dérivant de StandardBindingElement) et un "YourBindingCollectionElement" (dérivant de StandardBindingCollectionElement) avec lui?

Si tel est le cas, utilisez-le pour configurer votre liaison personnalisée, comme s'il s'agissait d'une autre liaison.

La première étape consiste à enregistrer votre obligatoire dans le fichier app.config ou web.config dans la section Extensions de <system.serviceModel>

<extensions> 
    <bindingExtensions> 
    <add name="yourBindingName" 
     type="YourBinding.YourBindingCollectionElement, YourBindingAssembly" /> 
    </bindingExtensions> 
</extensions> 

Maintenant, votre nouvelle liaison est enregistré comme « normal "liaison disponible dans WCF. Indiquez vos détails dans la section fixations comme pour les autres liaisons aussi:

<bindings> 
    <yourBinding> 
    <binding name="yourBindingConfig" 
      proxyAddress="...." useDefaultWebProxy="false" /> 
    </yourBinding> 
</bindings> 

autres paramètres ici Indiquez, tels que définis dans la classe « ... BindingElement ».

Enfin, utilisez votre liant comme une liaison normale dans vos services et/ou des sections de clients dans system.serviceModel:

<client> 
    <endpoint 
    address="....your url here......" 
    binding="yourBinding" 
    bindingConfiguration="yourBindingConfig" 
    contract="IYourContract" 
    name="YourClientEndpointName" /> 
</client> 

Je ne pouvais pas vraiment trouver beaucoup de ressources sur la façon d'écrire votre propre liaison dans le code sur le Web - Microsoft a un WCF/WPF/WF sample kit qui comprend quelques exemples dont j'ai appris assez fondamentalement pour le comprendre :-)

Il ya un très bon article by Michele Leroux Bustamante sur la création de vos liaisons personnalisées - partie 2 d'une série, mais partie 1 n'est pas disponible en public :-(

Voici un exemple de liaison personnalisée dans le code pour lequel vous pouvez télécharger le code source complet: ClearUserNameBinding.

Marc

0

Si vous souhaitez utiliser cette liaison personnalisée via la configuration, vous devez étendre la base abstraite BindingCollectionElement et définir élément bindingExtensions dans web.config.

Questions connexes