J'ai un attribut personnalisé que je souhaite appliquer à chaque méthode de mon service WCF.
Je procède comme ceci: p> Le problème est que mon service est que mon service est que mon service Contient des centaines de méthodes et je ne veux pas écrire [Attribut] avant tout. Existe-t-il un moyen d'appliquer l'attribut à toutes mes méthodes de mon service? P> Voici la signature de mon attribut: p> J'ai essayé ceci: p> et que: p> mais il ne fonctionne toujours pas. P> p>
5 Réponses :
Selon iserviceBehaviour documentation, si Vous implémentez cette interface et créez un attribut et mettez-le au niveau de la classe, il sera appliqué à toutes les opérations:
Créer un attribut personnalisé qui implémente iserviceBehavior et l'utiliser Pour marquer les cours de service qui doivent être modifié. Quand un objet ServiceHost est construit, utilise la réflexion à Découvrez les attributs sur le service taper. Si des attributs mettent en œuvre Iservicebehavior, ils sont ajoutés à la collection de comportements sur ServiceDescription. P> blockQquote>
update h2>
au lieu de la mise en œuvre
ioperationbehaviour code>, ajoutez le comportement requis dans le
iservicebehaviour code> par boucle Opérations strong>: p>
xxx pré> p>
Merci de votre aide. Vous avez raison, j'applique cet attribut à la classe et une partie de cela fonctionne, mais la partie qui utilise ioperationBehavior Wont fonctionne si je ne l'applique pas à toutes les méthodes.
Merci, regarde dans mon édition pour voir ce que j'ai essayé.makes parfaits, mais ça ne marche toujours pas.
Ok, laissez-moi vous revenir après votre retour à la maison.
Définir l'attribut comportemental de service, appliquez l'attribut sur le niveau de service. Dans le comportement, itérale à toutes les méthodes définies dans le contrat et faire toutes les choses MyAttribute. P>
Cela ne fonctionnera pas à moins que vous réécrivez la façon dont ServiceHost Découvrez les méthodes d'exposition dans le service
Vous pouvez envisager d'utiliser des actions AOP ou post-construction, afin d'injecter des attributs dans le code compilé. P>
Comment? La question est de savoir comment?
@SaeedNeamati Lire des documents pour presque toute la bibliothèque de AOP pour .NET, comme postsharp, AOP.NET, etc. Ils ont la capacité d'être inclus dans l'action post-construction. Si vous avez une question particulière à ce sujet, n'hésitez pas à le demander ici.
Les éléments suivants doivent faire l'affaire en utilisant le comportement de service pour ajouter le comportement opérationnel correct qui appelle l'invocateur.
public class MyAttribute : Attribute, IServiceBehavior, IOperationBehavior { #region IServiceBehavior Members public void ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase host) { foreach (ServiceEndpoint endpoint in host.Description.Endpoints) { foreach (var operation in endpoint.Contract.Operations) { operation.Behaviors.Add(this); } } } ... #endregion #region IOperationBehavior Members public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation) { dispatchOperation.Invoker = new OperationInvoker(dispatchOperation.Invoker); } ... #endregion }
Cela ressemblait à une bonne réponse à moi, mais cela n'a pas fonctionné non plus
J'utilise cela dans le code de production aujourd'hui et je travaille. Je ne suis pas sûr que le problème que vous rencontrez. Je ne sais pas comment aider davantage. J'ai vérifié le code et rien ne se distingue différent de mon code de production. Merci.
@Aarron intainback mea cupa! Votre code a parfaitement travaillé; J'ai juste oublié de supprimer le lancer notimplementaedException () inséré par VS Studio :). Merci
Pourquoi vous n'utilisez pas T4 pour générer des codes reproductibles? Il est préférable que nous utilisons la réflexion en temps de compilation que le temps d'exécution. P>
La méthode de service logiquement est l'appelant d'une méthode commerciale. Vous pouvez donc générer facilement des méthodes de service avec les attributs nécessaires en lisant des méthodes publiques de classe d'entreprise. Il suffit de faire attention lorsque nous mettons en œuvre la classe d'affaires. P>
Dépend de l'attribut spécifique et, plus important encore, sur quel code le consomme.