C# 4.0 WCF REST JSON - HTTP OBTENIR le CODE de 400 Bad Request
Lorsque vous essayez de créer un service simple pour retourner une simple chaîne JSON par la suite plusieurs tutoriels. Je suis bloquée sur deux machines différentes avec un HTTP Statuscode 400 bad request.
Exemple des tutoriels
Reposant Service WCF avec JSON pt.1 & pt.2 - http://www.youtube.com/watch?v=5BbDxB_5CZ8
J'ai aussi cherché sur Google et ici (StackOverflow) pour le même problème, sans succès.
Le problème est que je vous le 400 bad request lors de la tentative de faire un test de cohérence à parcourir pour le service WCF et d'exécuter la méthode. Par la compilation du service et de parcourir cette adresse: http://localhost:49510/Service1.svc/GetPerson
Tout comme le tutoriel. J'ai essayé de trouver une solution pour les 3 jours. Toute aide est appréciée.
C'est ce que je fais.
J'ai d'abord créer un nouveau projet, un Service WCF très simple d'application. - Je supprimer le défaut de Service1.svc et ajouter un nouveau Service WCF, qui génèrent une nouvelle Service1.svc et un IService1.cs
Voici le code pour l'interface (IService1.cs)
namespace WcfService1
{
//NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method="GET", BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, UriTemplate="GetPerson")]
Person GetPerson();
}
[DataContract(Name="Person")]
public class Person
{
[DataMember(Name="name")]
public string Name { get; set; }
}
}
Voici le code pour le Service1.svc
namespace WcfService1
{
//NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class Service1 : IService1
{
public Person GetPerson()
{
return new Person() { Name = "Tobbe" };
}
}
}
Et le Web.la config est intacte et le look aime ce web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
OriginalL'auteur user1087261 | 2011-12-08
Vous devez vous connecter pour publier un commentaire.
Pour le RESTE de la WCF que Vous avez à faire la liaison et le point de terminaison de réglage dans le web.config
Remplacer l'ensemble de votre site web.config par la suite et il va travailler
Vous étiez en restant avec 2 choses
Utilisation webHttpBinding (changement de port http par défaut de la cartographie pour webHttpBinding)
Spécifier webHttp Point de Fin de Comportements
OriginalL'auteur Arun Rana
Vous ne spécifiez pas de n'importe quel poste... Par défaut sur WCF 4, d'un point de terminaison à l'aide de basicHttpBinding sera utilisé. Il ne veux pas travailler ici parce que c'est un SAVON à base de liant. Ce que vous voulez utiliser est webHttpBinding qui est REST...
Voici comment remplacer la valeur par défaut de liaison avec WCF 4 :
Vous devez également activer webHttp par l'ajout de ce point de terminaison de comportement dans votre config :
http://msdn.microsoft.com/en-us/library/bb924425.aspx
OriginalL'auteur Romain Meresse
Je ne suis pas entièrement sûr de savoir pourquoi, mais quand j'ai ajouté le "Factory" attribut mon .SVC fichier (vous devez explicitement faites-le glisser vers Visual Studio), tout juste œuvres - sans aucune modification des paramètres par défaut dans le Web.config!
J'ai ajouté Factory="le Système de.ServiceModel.L'Activation.WebServiceHostFactory" donc mon .SVC fichier passé de ceci:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceNameSpace.ServiceName" CodeBehind="ServiceName.svc.cs" %>
:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceNameSpace.ServiceName" CodeBehind="ServiceName.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
Le seul effet secondaire qui semble être que lorsque vous cliquez sur le .SVC fichier dans le navigateur, vous obtenez un " point de Terminaison ne trouve pas d'erreur, mais le service fonctionne correctement lorsque vous l'appelez correctement de toute façon. Comme mentionné précédemment, je suis en utilisant un site Web par défaut.config avec .NET 4.6 (Simplifié de configuration WCF), donc j'ai peut-être besoin d'ajouter de point de terminaison de détails pour que cela fonctionne de nouveau.
Note à l'animateur: mes excuses pour la publication de cette réponse sur un couple de questions. Ne pas le faire à nouveau. Cependant, je ne pense pas que la suppression de ces DEUX questions a été très équilibré. C'est pourquoi j'ai posté cette réponse ici.
OriginalL'auteur QA Collective