web-dev-qa-db-fra.com

Échec de l'ajout d'un service. Les métadonnées de service peuvent ne pas être accessibles. Assurez-vous que votre service est en cours d'exécution et expose des métadonnées.

MODIFIER:

Après avoir modifié le web.config et que je ne reçois pas d'erreur qui soit bonne .... alors j'ajoute une nouvelle page (html) et écris ce petit code pour utiliser le service de la manière suivante:

 $("#btn12").click(function (event) {
                $.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
                function (data) {
                    alert(data);
                });
                //return false;
            });

Je vois l'erreur suivante dans mon FireBug:

http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request

Remarque: j'ai ajouté une page html sur le même projet wcf et l'exécutant lui-même, je suppose donc que le service est également en cours d'exécution ...

Qu'est-ce qui ne va pas ici?

END EDIT

Je viens de créer un nouveau service wcf et lorsque je tape f5 de VS, j'obtiens cette erreur dans la fenêtre du client de test WCF:

Échec de l'ajout d'un service. Les métadonnées de service peuvent ne pas être accessibles. Assurez-vous que votre service est en cours d'exécution et expose des métadonnées.

Erreur: impossible d'obtenir les métadonnées à partir de http: // localhost: 3696/MobileService.svc } _ S'il s'agit d'un service Windows (R) Communication Foundation auquel vous avez accès, vérifiez que vous avez activé la publication de métadonnées au 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 .

Erreur d'échange WS-Metadata
URI: http: // localhost: 3696/MyService.svc } _
Les métadonnées contiennent une référence qui ne peut pas être résolue: ' http: // localhost: 3696/MyService.svc '. 

Il n'y avait aucun noeud final à l'écoute sur http: // localhost: 3696/MyService.svc pouvant accepter le message. Cela est souvent dû à une adresse incorrecte ou à une action SOAP. Voir InnerException, si présent, pour plus de détails. 

Impossible de se connecter au serveur distant
Aucune connexion n'a pu être établie car la machine cible l'a activement refusée 127.0.0.1:3696
Erreur HTTP GET
URI: http: // localhost: 3696/MyService.svc } _
Une erreur s'est produite lors du téléchargement de ' http: // localhost: 3696/MyService.svc } _'.
Impossible de se connecter au serveur distant
Aucune connexion n'a pu être établie car la machine cible l'a activement refusée 127.0.0.1:3696

Ma config: 

<behaviors>
    <endpointBehaviors>
        <behavior name="MyService.MyService">
            <webHttp/>
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="metadataBehavior">
            <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
        </behavior>
    </serviceBehaviors>
</behaviors>
<services>
    <service name="MyService.MyService" 
             behaviorConfiguration="metadataBehavior">
        <endpoint 
            address="http://localhost/MyService.svc" 
            binding="customBinding"
            bindingConfiguration="jsonpBinding" 
            behaviorConfiguration="MyService.MyService"
            contract="MyService.IMyService"/>
    </service>
</services>
<bindings>
    <customBinding>
        <binding name="jsonpBinding">
            <jsonpMessageEncoding/>
            <httpTransport manualAddressing="true"/>
        </binding>
    </customBinding>
</bindings>
<extensions>
    <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </bindingElementExtensions>
</extensions>
36
Nick Kahn

Vous devez ajouter un noeud final d'échange de métadonnées (mex) à votre service:

<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address="http://localhost/MyService.svc" 
          binding="customBinding" bindingConfiguration="jsonpBinding" 
          behaviorConfiguration="MyService.MyService"
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>

Maintenant, vous devriez pouvoir obtenir des métadonnées pour votre service

Update: ok, vous le lancez à partir de Visual Studio. Dans ce cas, il sera hébergé sur Cassini, le serveur Web intégré. Cependant, cette bête seulement supporte HTTP - vous n'utilisez pas ce protocole dans votre liaison ...

De plus, puisque vous hébergez ceci à Cassini, l'adresse de votre service sera dictée par Cassini - vous ne pouvez définir quoi que ce soit. 

Donc, ma suggestion serait:

  • essayez d'utiliser la liaison HTTP (juste pour les tests)
  • fais que ça marche
  • une fois que vous savez que cela fonctionne, changez-le en votre lien personnalisé et hébergez-le dans IIS

Je changerais donc la configuration en:

<behaviors>
   <serviceBehaviors>
      <behavior name="metadataBehavior">
         <serviceMetadata httpGetEnabled="true" />
      </behavior>
   </serviceBehaviors>
</behaviors>
<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address=""   <!-- don't put anything here - Cassini will determine address -->
          binding="basicHttpBinding" 
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>

Une fois que vous avez cela, essayez de faire un View in Browser sur votre fichier SVC dans votre solution Visual Studio - si cela ne fonctionne pas, vous avez toujours un problème majeur. 

Si cela fonctionne - vous pouvez maintenant appuyer sur F5 dans VS et votre service devrait apparaître, et en utilisant l'application WCF Test Client , vous devriez pouvoir obtenir vos métadonnées de service à partir de) l'adresse où Cassini a démarré votre service , ou b) l'adresse mex (adresse de Cassini + /mex)

34
marc_s

Si vous renommez le fichier svc, assurez-vous que votre balisage est correct. vous n'avez pas besoin de modifier la configuration par défaut et de suivre les étapes ci-dessous 1) Allez dans le fichier SVC avec le bouton droit de la souris et sélectionnez Afficher le balisage 2) Assurez-vous que le code derrière et le service pointant pour corriger le fichier et nom du cours.

15
Aravind Mungara

FYI- VOUS POUVEZ ÉGALEMENT obtenir cette erreur d'un ordinateur ne disposant pas de suffisamment de mémoire. J'ai eu cette erreur sur une machine que je lance avec 16 Go de mémoire. J'avais un VM en cours d'exécution avec 6 concerts et beaucoup d'applications gourmandes en mémoire. Fermez certains et ce problème est parti.

J'ai quand même eu l'erreur dans le titre de la question de

Échec de l'ajout d'un service. Les métadonnées de service peuvent ne pas être accessibles. Assurez-vous que votre service est en cours d'exécution et expose des métadonnées.

J'ai remarqué un message plus important sur la mémoire lors de l'utilisation du client de test WCF.

J'espère que ceci aide quelqu'un d'autre.

6
Tom Stickel

Ajoutez Serializable() avant le type que vous exposez 

Serializable()
Public Class YourType

Mettez Serializable dans <>

3
William

Dans mon cas, j'avais cette erreur car l'option (HttpActivation) n'était pas activée.  Windows features dialog box showing HTTP Activation under WCF Services under .NET Framework 4.6 Advanced Services

3

si vous travaillez avec le service WCF .NET 4.0 - assurez-vous que Global.asax ne se trouve pas dans le répertoire source. Si c'est le cas, il est récupéré au moment de l'exécution et tente d'être compilé dans ... 

2
Brian Byrne

changer le type de liaison de wsHttpbinding en une liaison basichttp dans la balise de noeud final et de wsHttpbinding en une balise mexhttpbinginding dans une métadonnée a permis de surmonter l'erreur. Je vous remercie... 

2
Krishnanand Kamat

Dans mon cas, en commentant la 

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 

"Impossible d'ajouter un service. Les métadonnées du service ne sont peut-être pas accessibles. Assurez-vous que votre service est en cours d'exécution et expose des métadonnées".

1
Dev

La propriété IsOneWay=true peut être vraie dans le contrat opérationnel de l'interface . Supprimez cette propriété pour éliminer cette erreur.

0
Tamilselvan K

J'ai essayé plusieurs solutions mentionnées sur le Web, malheureusement sans succès . Dans mon projet, j'ai deux interfaces (xml/json) pour chaque service. L’ajout de points de terminaison mex ou de configurations de liaison n’a pas du tout aidé… .. Mais, j’ai remarqué, j’obtiens cette erreur uniquement lorsque vous exécutez un projet avec * .svc.cs ou un fichier * .config avec un focus. Lorsque j'exécute un projet axé sur le fichier IService.cs (où les interfaces sont définies), le service est ajouté sans erreur. C’est vraiment étrange et, à mon avis, la conclusion est un bogue dans Visual Studio 2013 . J'ai reproduit le même comportement sur plusieurs machines (même sur la machine Windows Server) . J'espère que cela aidera quelqu'un.

0
user2987476

La plupart du temps, cela se produit en raison d'un espace mémoire réduit. Vérifiez d'abord, puis essayez d'autres astuces.

0
Vikrant Singh