2010-02-26 7 views
2

Je vais avoir quelques problèmes qui peuvent être liés ou ne peuvent pas. J'ai remarqué que lorsque j'utilise Add Service Reference dans Visual Studio pour ajouter une référence à mon service de données, le fichier reference.cs qu'il génère ne compile pas. Il se plaint d'un espace de noms manquant. Je peux le réparer à compiler, mais cela arrive chaque fois que je mets à jour la référence, et il est inquiétant sur d'autres niveaux, tels que « a cette cause d'autres problèmes ».Impossible de référencer correctement un dataservice WCF

J'ai aussi remarqué que quand je fais cela, mon serveur hôte (une application console qui héberge le service de données) enregistre ceci:

An exception occurred [System.Data.Services.DataServiceException] :: The URL 
representing the root of the service only supports GET requests. 

Ceci est la configuration de service:

<service behaviorConfiguration="behaviour" name="StatsPlus.Server.HostedServices.SPDataServiceHost"> 
    <endpoint address="svc" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 

    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8752/DataService/"/> 
     </baseAddresses> 
    </host> 
    </service> 

Et la comportement:

<behavior name="behaviour"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     <dataContractSerializer maxItemsInObjectGraph="10"/> 
    </behavior> 

Lorsque je tente de lancer svcutil http://localhost:8752/DataService/, je reçois ceci:

HTTP GET Error 
URI: http://localhost:8752/DataService 
There was an error downloading 'http://localhost:8752/DataService'. 
The request failed with HTTP status 405: Method Not Allowed. 

Des idées? Très apprécié

Merci

Répondre

2

Je pense que vous vous connectez à une mauvaise adresse. Vous avez une adresse de base

<add baseAddress="http://localhost:8752/DataService/"/> 

et en plus de cela une adresse de noeud final relatif

<endpoint address="svc" binding="webHttpBinding" 

de sorte que votre URL complète sera la combinaison des deux:

http://localhost:8752/DataService/svc 

Avez-vous essayé se connecter là ??

Je ne sais pas si vous pouvez avoir un point de terminaison d'échange de métadonnées « MEX » avec les services WCF REST, vraiment. J'avais l'impression que le proxy côté client pour un service de données WCF obtient ses métadonnées via un appel d'URL spécial à partir du point de terminaison HTTP. essayez donc peut-être d'enlever cela de votre config aussi bien (et vous ne pouvez pas utiliser svcutil sur ce service, je crois - svcutil est uniquement pour les appels de service SOAP, si je ne me trompe pas).

En outre, puisque vous utilisez webHttpBinding et auto-hébergement, vous devez ajouter le comportement webHttp:

<behavior name="behaviour"> 
    <serviceMetadata httpGetEnabled="true"/> 
    <serviceDebug includeExceptionDetailInFaults="true"/> 
    <dataContractSerializer maxItemsInObjectGraph="10"/> 
    <webHttp /> 
</behavior> 

Si vous faites ces deux étapes, je pense que vous devriez être en mesure d'obtenir à votre WCF Service de données. Essayez-le et laissez-nous savoir!

+0

J'ai ajouté le comportement du point de terminaison webhttp mais je ne vois aucune différence. Une autre chose dont je ne suis pas sûr, c'est que j'ai aussi un service WCF "normal" (utilisant [ServiceContract]) dans le même processus. Je me demande si cette "erreur" est en fait correcte - la référence de service semble juste essayer un tas de variantes d'URI jusqu'à ce que l'on travaille, et le code qu'il génère est très bien avec quelques modifications. Je vais essayer quelques tests de base et voir si ça marche vraiment :) – JohnL

Questions connexes