41 votes

Erreur WCF : L'adressage manuel est activé sur cette fabrique, donc tous les messages envoyés doivent être préadressés

J'ai un service WCF hébergé pour lequel j'ai créé une fabrique personnalisée, afin qu'il puisse fonctionner avec plusieurs en-têtes d'hôtes :

/// 
/// Nécessaire pour l'hébergement lorsque plusieurs en-têtes d'hôtes sont présents
/// 
public class MultipleHostServiceFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        List addresses = new List();
        addresses.Add(baseAddresses[0]);
        return base.CreateServiceHost(serviceType, addresses.ToArray());
    }
}

Je suis assez sûr que mes fichiers de configuration sont maintenant corrects, à la fois sur le client et sur le serveur (peuvent être vus ici).

L'erreur que je reçois semble être liée à la fabrique :

L'adressage manuel est activé sur cette fabrique, donc tous les messages envoyés doivent être préadressés.

public string GetData(int value) {
    return base.Channel.GetData(value);
}

L'erreur se produit à la ligne return base.Channel.GetData(value);.

62voto

bendewey Points 25437

J'ai rencontré cette erreur et le problème a été résolu en ajoutant le WebHttpBehavior (ligne 2 ci-dessous) :

var factory = new ChannelFactory(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();

27voto

jason mardell Points 189

J'ai ajouté une référence de service comme d'habitude et j'ai obtenu cette erreur. Il s'avère que tout ce que j'avais à faire était de modifier la configuration du client pour utiliser une configuration de point de terminaison avec un comportement spécifiant webhttp

2voto

ElHaix Points 4261

Donc cela a finalement pris fin!

Brian - merci pour vos conseils à ce sujet. Les liaisons étaient mal alignées entre le client et le serveur, et j'ai finalement opté pour ce qui suit dans les deux :

... et en configurant leurs attributs de liaison d'extrémité et de configuration de liaison en conséquence :

Comme c'est un terrain relativement nouveau pour moi, juste l'explication de pourquoi ces erreurs apparaissaient m'a orienté dans la bonne direction :).

1voto

Brian Points 82719

Je ne pense pas que cela ait nécessairement quoi que ce soit à voir avec votre usine.

Voir

http://msdn.microsoft.com/fr-fr/library/system.servicemodel.channels.transportbindingelement.manualaddressing.aspx

ou d'autres parmi les premiers résultats de Bing pour "manualaddressing". Il semble que la liaison utilisée soit incompatible avec une autre partie de la pile/logique de messagerie.

0voto

real_yggdrasil Points 352

Oui, la réponse de Jason Mardell a également fonctionné pour moi, Mon binding ne pointait pas vers un comportement. donc dans le binding j'ai ajouté : behaviorConfiguration="webhttp"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X