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>
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:
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
)
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.
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.
Ajoutez Serializable()
avant le type que vous exposez
Serializable()
Public Class YourType
Mettez Serializable
dans <>
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 ...
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...
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".
La propriété IsOneWay=true
peut être vraie dans le contrat opérationnel de l'interface . Supprimez cette propriété pour éliminer cette erreur.
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.
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.