En passant, la chaîne XML dans le corps de la WCF REST service à l'aide de WebInvoke
Je suis un débutant de la WCF, REPOS, etc. Je suis en train d'écrire un service et un client.
Je veux passer xml comme une chaîne de caractères pour le service et obtenir une réponse en retour.
Je suis en train de passer le xml dans le corps de la méthode POST, mais quand je lance mon client, il se bloque.
Il fonctionne très bien quand je change de service pour accepter le paramètre comme une partie de l'uri.
(quand je change de UriTemplate de "getString" à "getString/{xmlString}" et passer un paramètre de chaîne).
Je suis coller le code ci-dessous.
Service
[ServiceContract]
public interface IXMLService
{
[WebInvoke(Method = "POST", UriTemplate = "getString", BodyStyle=WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
string GetXml(string xmlstring);
}
//Implementaion Code
public class XMLService : IXMLService
{
public string GetXml(string xmlstring)
{
return "got 1";
}
}
Client
string xmlDoc1="<Name>";
xmlDoc1 = "<FirstName>First</FirstName>";
xmlDoc1 += "<LastName>Last</LastName>";
xmlDoc1 += "</Name>";
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(@"http://localhost:3518/XMLService/XMLService.svc/getstring");
request1.Method = "POST";
request1.ContentType = "application/xml";
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1);
request1.GetRequestStream().Write(bytes, 0, bytes.Length);
Stream resp = ((HttpWebResponse)request1.GetResponse()).GetResponseStream();
StreamReader rdr = new StreamReader(resp);
string response = rdr.ReadToEnd();
Quelqu'un pourrait s'il vous plaît signaler ce qui est mal à cela?
Ça va changer si vous utilisez
Je vous remercie pour votre réponse. J'ai essayé d'utiliser XElement. pas de chance!!
XElement
au lieu de chaîne de caractères comme paramètre? Également définir Content-Length
de la demande.Je vous remercie pour votre réponse. J'ai essayé d'utiliser XElement. pas de chance!!
OriginalL'auteur sumi | 2011-06-06
Vous devez vous connecter pour publier un commentaire.
Modifier votre contrat d'opération d'utiliser un XElement et la BodyStyle de Nu
En outre, je vous soupçonner code du client doit contenir (note la première +=):
OriginalL'auteur Maurice
Vous avez encore besoin de créer une classe:
Vous pouvez également utiliser un violon pour vérifier si la sérialisé en XML peut être passé en paramètre.
OriginalL'auteur iamtonyzhou
Je crois que le problème, c'est que vous êtes à la définition de la
BodyStyle
àWrappedRequest
qui aurait besoin de vos entrant XML être enveloppé dans un<GetXml>
élément quel que soit l'espace de noms de votre contrat de service est défini. Si vous définissez laBodyStyle
àBare
et l'utilisation XElement @Ladislav Mmka proposé dans le commentaire que vous devriez être bon d'aller.OriginalL'auteur Drew Marsh
Vous avez besoin d'envelopper votre chaîne XML dans un
<string/>
tag avec Microsoft approprié de la sérialisation XML namespace. Cette question a été répondu avant, ici, sur le bien, mais, je ne le trouve pas pour le moment.OriginalL'auteur Darrel Miller