WCF REST .SVC lance une erreur lors de la visualisation directement, mais fonctionne autrement

StackOverflow https://stackoverflow.com/questions/6374733

Question

J'ai un service de repos WCF avec deux opérations d'opération comme suit:

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

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

Quand je visite http: //localhost/rest.svc/ping/ ça marche bien et si je visite http: //localhost/rest.svc/files/ ça fonctionne bien.

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

System.InvalidOperationException: Une exception a été lancée dans un appel à une extension d'exportation WSDL: System.ServiceModel.Description.DatacontractSerializerOperationBehavior Contrat: 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 type de type System.ServiceModel.Channels.Message ou un type qui a MessageContractAttribute et d'autres paramètres de différents types. Lorsque vous utilisez System.ServiceModel.Channels.Message ou 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 le corriger / la supprimer afin qu'il affiche la page de terminaison WCF par défaut. J'utilise simplement WCF pour me reposer uniquement.

Merci!

Jeffrey Kevin Pry

Était-ce utile?

La solution

C'est un problème où le moteur WSDL tente de générer une description de votre service et il est incapable de le faire 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 est fait pour traiter. C'est pourquoi vous obtenez l'erreur que vous voyez sur le message de ne pas être mélangé avec des paramètres dactylographié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 de repos, vous pensez peut-être au <serviceDebug httpHelpPageEnabled="true" />?

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top