InvalidOperationException lors de la création d'une instance de service Web WCF

StackOverflow https://stackoverflow.com/questions/24993

  •  09-06-2019
  •  | 
  •  

Question

J'ai un service Web WCF référencé à partir d'une bibliothèque de classes.Une fois le projet exécuté, lors de la création de l'objet client de service à partir d'une bibliothèque de classes, je reçois une InvalidOperationException avec le message :

Impossible de trouver l'élément de point de terminaison par défaut qui fait référence au contrat «myServiceReference.imyService» dans la section de configuration du client ServiceModel.Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application, ou parce qu'aucun élément de point de terminaison correspondant à ce contrat n'a pu être trouvé dans l'élément client.

Le code que j'utilise pour créer l'instance est :

myServiceClient = new MyServiceClient();

d'où MyServiceClient hérite de

System.ServiceModel.ClientBase

Comment puis-je résoudre ce problème ?

Note:J'ai une application console distincte qui crée simplement le même objet de service et lui fait des appels et cela fonctionne sans aucun problème.

Était-ce utile?

La solution

Voici mon fichier app.config de la bibliothèque de classes :

Vous devez placer ces paramètres de configuration dans le fichier de configuration de l'application principale.L'application .NET (qui appelle votre bibliothèque de classes) utilise les données de son propre fichier de configuration et non celles de votre fichier de configuration de bibliothèque.

Autres conseils

Ou vous pouvez définir le point de terminaison dans votre code :

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

J'ai eu un cas similaire.J'avais une bibliothèque de classes qui appelait un service Web, puis j'avais un .EXE qui appelait le .DLL de la bibliothèque de classes.Je pense que c'est le fichier de config du .EXE qui est utilisé et non celui de la config .DLL.

Mais comme Richard l'a dit ci-dessus, j'ai dû qualifier pleinement l'espace de noms.C'est un peu pénible.Ci-dessous, vous trouverez exactement ce que j'ai modifié.La douleur est que j'ai dû la modifier à deux endroits, l'une dans la référence.cs générée lorsque vous créez une référence de service et l'autre dans le fichier de configuration.Ainsi, chaque fois que je change de service Web et que j'effectue une "Mise à jour de référence", je dois à nouveau modifier le code C#.

1) Vous devez en fait modifier le ConfigurationName dans le reference.cs comme suit :

Depuis: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

À: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) puis modifiez également la valeur « contrat » dans tous les app.config associés (pour les .dll et .exe) comme suit :

Depuis:

<adresse du point de terminaison=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" binkingConfiguration = "wshttpbinding_itwowayasync" contrat = "rctwebService.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowayasync">

À:

<adresse du point de terminaison=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contrat = "tfbic.rct.hip.components.rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowayync"

Juste pour être clair : comment puis-je savoir quel était l'espace de noms complet ?L'espace de noms du programme était TFBIC.RCT.HIP.À l'intérieur, le code C # a une instruction supplémentaire d'espace de noms:

namespace RCTHipComponents

Il serait probablement utile que vous publiiez votre fichier app.config, car ce type d'erreur tend à indiquer un problème dans le fichier app.config. <endpoint> bloc.Assurez-vous que l'attribut du contrat vous semble correct.

Modifier:Essayez de qualifier pleinement la valeur de votre contrat ;utilisez l'espace de noms complet.Je pense que c'est nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top