10
votes

C # 4.0 WCF Reste JSON - HTTP GET CODE 400 Demande mauvaise

Lorsque vous essayez de créer un service simple pour renvoyer une simple chaîne JSON en suivant plusieurs tutoriels. Je suis coincé sur deux machines différentes avec une mauvaise demande HTTP StatusCode 400. Exemple de tutoriels Service WCF reposant avec JSON PT.1 & PT.2 - http://www.youtube.com/ regarder? v = 5bbdxb_5cz8

J'ai aussi Google et recherché ici (Stackoverflow) pour un problème similaire sans succès.

Le problème est que je reçois la 400 demande de mauvaise qualité lorsque vous essayez de faire une mentale Vérifiez pour parcourir le service WCF et exécuter la méthode. En compilant le service et parcourez cette adresse: http: // localhost: 49510 / Service1.svc / getperson Tout comme le tutoriel. J'ai essayé de trouver une solution pour comme 3 jours. Toute aide est appréciée.

C'est ce que je fais.

Je crée d'abord un nouveau projet une simple application de service WCF. Je supprime le service par défaut1.svc et ajoutez un nouveau service WCF, qui génère un nouveau service1.svc et un iservice1.cs

voici le code de l'interface ( iservice1.cs ) xxx

voici le code de la service1.svc xxx

et le Web.config est intacte et regarde aime cette web.config xxx


0 commentaires

3 Réponses :


5
votes

Vous n'avez spécifié aucun point de terminaison ... Par défaut sur WCF 4, un point d'extrémité utilisant BasichttpLinding sera utilisé. Cela ne fonctionnera pas ici car il s'agit d'une liaison à base de savon. Ce que vous voulez utiliser est webhttpbinding qui est basé sur le repos ...

Voici comment remplacer la liaison par défaut avec WCF 4: P>

<behaviors>
    <endpointBehaviors>
        <behavior>
            <webHttp />
        </behavior >
    </endpointBehaviors>
<behaviors>


0 commentaires

14
votes

Pour le repos WCF, vous devez effectuer la liaison et le paramètre de point d'extrémité dans web.config

Remplacez votre web.config en suivant et il fonctionnera p>

<system.serviceModel>
    -----
    </protocolMapping>
    <behaviors>
        <endpointBehaviors>
            <behavior>
                <webHttp />
            </behavior >
        </endpointBehaviors>
    <behaviors>
    ------
<system.serviceModel> 


1 commentaires

Je viens de copier et coller le fichier comme vous l'avez dit! Tu as sauvé ma journée! Excellent! Merci beaucoup!



3
votes

Je ne suis pas tout à fait sûr pourquoi, mais quand j'ai ajouté l'attribut "usine" à mon fichier .svc (vous devez le faire glisser explicitement sur Visual Studio), tout simplement fonctionne - sans modification des paramètres par défaut dans web.config!

J'ai ajouté usine = "system.servicemodel.activation.webserviceHostFactory" mon fichier .svc est donc passé de cette option:

<% @ ServiceHost Langue = "C #" Débug = "TRUE" SERVICE = "SERVICENAMESPACE.SERVICENNAME" CODEBEHIND = "SERVICENAME.SVC.CS"%>

à ceci:

<% @ servicehost Langue = "c #" débogue = "vrai" service = "servicenamespace.servicename" codeBeHind = "servicename.svc.cs" usine = "System.ServiceHostFactory"%> < / code>

Le seul effet secondaire semble être que lorsque vous cliquez sur le fichier .SVC dans le navigateur, vous obtenez une erreur «noeud final non trouvé», mais le service fonctionne correctement lorsque vous l'invoquez correctement. Comme mentionné précédemment, j'utilise un web.config par défaut avec .NET 4.6 ( Configuration WCF simplifiée ), donc je devrais encore ajouter des informations de terminaison pour que cela fonctionne à nouveau.

Note au modérateur: Mes excuses d'affichage de cette réponse lors de quelques questions. Ne le fera plus. Cependant, je ne pense pas que la suppression des deux questions était très équilibrée. C'est pourquoi j'ai ré-posté cette réponse ici uniquement.


0 commentaires