web-dev-qa-db-fra.com

Le client de test WCF ne peut pas ajouter de service ni obtenir de métadonnées.

Quelqu'un peut-il me dire pourquoi je reçois cette erreur lorsque j'essaie d'ajouter mon service?

Erreur: Impossible d'obtenir les métadonnées à partir de http: // myserver/myapp . S'il s'agit d'un service Windows (R) Communication Foundation auquel vous avez accès, vérifiez que vous avez activé la publication des métadonnées à l'adresse spécifiée. Pour obtenir de l'aide sur la publication de métadonnées, consultez la documentation MSDN à l'adresse http://go.Microsoft.com/fwlink/?LinkId=65455 . URI d'erreur WS-Metadata Exchange: http: // myserver/myapp Les métadonnées contiennent une référence qui ne peut pas être résolue: ' http: // myserver/myapp '. Le serveur distant a renvoyé une réponse inattendue: (405) Méthode non autorisée. Le serveur distant a renvoyé une erreur: (405) Méthode non autorisée.HTTP GET Error URI: http: // myserver/myapp Une erreur s'est produite lors du téléchargement ' http: // myserver/myapp '. La demande a échoué avec le statut HTTP 403: Interdit.

Mise à jour: j'ai déjà le point final suivant,

<endpoint address="mex" 
          binding="mexHttpBinding"
          name="Metadata"
          contract="IMetadataExchange" />

J'ai aussi les comportements de service définis:

  <serviceBehaviors>
    <behavior name="myBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
10
hyprsleepy

Je l'ai compris. J'utilisais un chemin absolu sur l'un de mes points de terminaison et j'en avais plus d'un. Je l'ai changé en un chemin relatif et ensuite tout a fonctionné.

Cela peut également se produire si votre service n'est pas en cours d'exécution et peut ne rien avoir à faire avec des métadonnées. Si vous avez une ConfigurationErrorsException, vous verrez également ce résultat.

Je l'ai également eu lorsque j'essayais de sauvegarder les modifications de configuration dans le projet, puis il m'a dit de sauvegarder/écraser/ignorer, etc. Il a fini par ajouter un sous-type de projet "designer" et, une fois supprimé, il a fonctionné correctement.

5
hyprsleepy

Cela peut également se produire lorsque vous essayez de renvoyer un objet de classe personnalisé à partir de l'une des fonctions et que cette fonction n'a pas l'attribut [DataContract] dans la déclaration de classe. WCF ne peut pas déterminer le type de votre retour et envoie le message standard.

[Serializable]
[DataContract]
public class ServiceResult
{
  ....
}
8
Kevbo

J'ai eu ce problème, il s'avère que lorsque j'ai renommé le fichier .svc, une référence à ce fichier n'avait pas été renommée à partir de Service1.svc. Effectuez une recherche à l’échelle du projet et remplacez .Service1 par votre nouveau nom.

<%@ ServiceHost Language="C#" Debug="true" Service="MyNamespace.Service1" CodeBehind="MyRenamedService.svc.cs" %>

Service="MyNamespace.Service1" devrait lire Service="MyNamespace.MyRenamedService"

8
GJKH

J'ai découvert que j'avais la même erreur en raison d'un DataContract que j'utilisais et qui hérite de Dictionary. La configuration appropriée de DataContract doit être la suivante:

[CollectionDataContract(Name = "AdditionalProperties",
                            ItemName = "Property",
                            KeyName = "Key",
                            ValueName = "Value")]
public class AdditionalProperties : Dictionary<string, string>
{
}
0
Andrew

veuillez vérifier et lire tout le texte de l'erreur.

dans mon cas, une autre DLL a une erreur mais affiche la même erreur dans le texte d'erreur ci-dessus.

0
Ali Rasouli

Vérifiez que vous pouvez résoudre cette adresse et que vous avez spécifié le bon répertoire virtuel. Est-ce que myserver se résout en IP avec par exemple ping myserver ? Est-ce que myapp est le bon répertoire virtuel? Vous avez activé les métadonnées pour votre service wcf, mais l'URL est probablement fausse.

0
Tore Aurstad

Parfois, il n’ya rien à faire avec les métadonnées ou les paramètres; à la place, nous pouvons simplement utiliser 127.0.0.1 au lieu de http:\localhost \

0
Dani Mathew

C’est mon expérience de ce message d’erreur qui pourrait être utile à d’autres. Mon service WCF fonctionne correctement sur Windows Server 2008. le client peut être sauté.

Le client de test WCF ouvert avec des erreurs ne peut pas obtenir de métadonnées, l'assembly ne peut pas être chargé, etc.

La clé est, lancez d'abord le service ( http: // localhost: port/Service ), puis essayez uniquement le client de test WCF.

0
user2211290

Si l'ajout des points de terminaison de métadonnées n'est pas votre problème. Vérifiez plus loin dans les détails du message d'erreur. Il me manquait une bibliothèque; "Impossible de charger le fichier ou l'assembly *".

J'avais besoin de changer la référence à Copy Local = True 

0
Eric Schneider

Je suis nouveau dans la WCF et je viens de recevoir un projet contenant des services WCF à l'intérieur. J'avais des problèmes similaires avec l'utilisation de WCF Test Client dans VS2010 sur Win7. Après avoir essayé tous les changements de configuration de cet article et d’autres, je continuais à recevoir des erreurs similaires. 

Alors j'ai abandonné et j'ai commencé à lire sur la WCF. Ici, j'ai trouvé que VS devrait être lancé en tant qu'administrateur. Voici l'article: Tutoriel d'initiation WCF Il s'avère que je dois lancer VS2010 avec la case "Exécuter en tant qu'administrateur" cochée. Cela a résolu le problème et j'ai pu tester les services WCF dans VS2010. Je poste cette réponse si les autres regardent le Run en tant qu'administrateur.

0
CW30Meters

Dans mon cas, je n'avais pas activé BindingParams.AllowHttpGet. Lorsque cela a été défini sur true, cela a fonctionné ...

0
user007