2011-06-16 1 views
4

J'ai un service de repos WCF avec deux OperationContracts comme suit:WCF Rest .svc jette une erreur lors de l'affichage directement, mais fonctionne autrement

[OperationContract] 
    [WebGet(UriTemplate = "ping/")] 
    Message PingServer(); 

    [OperationContract] 
    [WebGet(UriTemplate = "files/")] 
    Message AddFile(string accessKey); 

Lorsque je visite http://localhost/rest.svc/ping/ cela fonctionne très bien et si je visite http://localhost/rest.svc/files/ cela fonctionne très bien .

Cependant, si je visite http://localhost/rest.svc directement, il jette l'erreur suivante:

System.InvalidOperationException: Une exception a été levée dans un appel à une extension à l'exportation WSDL: contrat System.ServiceModel.Description.DataContractSerializerOperationBehavior : http://tempuri.org/:IRest ----> System.InvalidOperationException: L'opération 'AddFile' n'a pas pu être chargée car elle a un paramètre ou un type de retour de type System.ServiceModel.Channels.Message ou un type qui a MessageContractAttribute et d'autres paramètres de types différents. Lors de l'utilisation de System.ServiceModel.Channels.Message ou de types avec MessageContractAttribute, la méthode ne doit pas utiliser d'autres types de paramètres.

Je comprends l'erreur, mais je me demandais comment corriger/supprimer afin qu'il affiche la page de point de terminaison WCF par défaut. Je n'utilise que WCF pour REST seulement.

Merci!

Jeffrey Kevin Pry

Répondre

6

Ceci est un problème où le moteur WSDL tente de générer une description pour votre service et il est impossible car le contrat de service que vous avez défini ne fonctionnerait normalement pas pour les points de terminaison de style RPC que le moteur WSDL doit traiter . C'est pourquoi vous obtenez l'erreur que vous voyez à propos du message ne pouvant pas être mélangé avec les paramètres tapés. Vous devez configurer le service avec <serviceMetadata httpGetEnabled="false" /> parce que WSDL et REST ne jouent pas ensemble.

Si vous attendez un autre type de page d'aide pour un service REST, vous pensez peut-être au <serviceDebug httpHelpPageEnabled="true" />?

+0

Génial ... le httpGetEnabled était ce dont j'avais besoin. –

1

Vous pouvez supprimer la page par défaut "aide" en définissant les HttpHelpPageEnabled (et le cas échéant HttpsHelpPageEnabled) propriétés à false dans le ServiceDebugBehavior. Ou dans config, définissez ces propriétés dans l'élément <serviceBehaviors/behavior/serviceDebug>.

+0

Cela affiche toujours l'événement d'erreur avec le paramètre dans web.config. –

+0

Si vous désactivez les deux pages d'aide, vous devriez voir une page disant quelque chose comme "Endpoint not found". Si vous voulez vraiment supprimer tous les types d'erreurs de la page "Aide", vous pouvez utiliser votre propre - J'ai répondu à un message sur les forums MSDN WCF à ce sujet - http://social.msdn.microsoft.com/Forums/fr-FR/wcf/thread/b6a63705-bccd-451a-b50a-4c6376feeabc – carlosfigueira

Questions connexes