2010-02-11 6 views
1

Je dois créer un service Web .NET (WCF est hors de question) qui devrait recevoir xml et renvoyer xml. Je configuration d'abord la fonction comme ceci:.Net Web Service type de contenu

[WebMethod] 
public string myFunc(string xmlRequest) 
{ 

Comment puis-je changer le type de contenu HTTP POST au texte/xml? En outre, je retourne la réponse XML sous forme de chaîne, mais dans la page d'aide de services web, il dit la réponse sera:

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://www.mysite.com/myFunc">string</string> 

Je dois enlever cet élément racine <string> en quelque sorte.

Ce service Web est appelé par une autre société qui n'utilise probablement pas .Net pour publier le fichier XML en tant que text/xml sur mon terminal.

Répondre

1

J'ai un framework de service web open source (fonctionne sur .NET et Mono) qui simplifie grandement l'effort requis pour créer des services web. Il est automatiquement configuré pour fournir XML (+ REST), JSON (+ REST), SOAP 1.1/1.2 points de terminaison pour tous vos services web:

Il est disponible à partir de:

http://www.servicestack.net/

Et il y a un live javascript et silverlight démo disponible (en cours d'exécution sur CentOS/Nginx) à: http://www.servicestack.net/ServiceStack.Examples.Clients/Default.htm

et un tutoriel disponible en ligne qui marche le processus de création et de consommer des services Web (pour MonoTouch mais applicable partout) ici:

http://www.servicestack.net/monotouch/remote-info/

0

Un document XML valide doit contenir un élément racine. Ce n'est pas XML à moins que cet élément string soit présent. Sinon, ce serait une réponse en texte brut.

0

Attendez, vous êtes désireux d'afficher vos données XML, mais le recevoir de nouveau en tant que chaîne de XML? Si je n'ai pas mal compris ce que vous dites, c'est certainement ce que vous semblez faire, et c'est tout à fait faux, pour être honnête. Est-ce que vous ne pouvez pas analyser la chaîne dans un document XML dans le service Web, et pourquoi l'autre société ne peut pas gérer un document XML avec un seul nœud? Ne peuvent-ils pas obtenir la valeur de chaîne à partir de ce nœud unique, puis analyser la chaîne XML eux-mêmes?

0

Bien l'élément <string> apparaît tel quel, car votre méthode est définie pour renvoyer une chaîne. Dans les coulisses, .NET ne prend en fait que l'objet renvoyé par votre méthode et le sérialise. Une chaîne sérialisée est représentée par <string>actual string contents</string>. Ce que vous voulez faire est en quelque sorte de retourner un objet qui sérialise exactement le message que vous voulez, ou, en supposant que votre chaîne contient réellement le XML, l'écrire directement dans le flux de réponse.

Je n'ai jamais essayé d'un [WebMethod], mais il pourrait travail quelque chose comme ceci:

[WebMethod] 
public void myFunc(string xmlRequest) 
{ 
    var myXml = @"<?xml version="1.0" encoding="utf-8"?><myRoot><myElement /></myRoot>"; 
    Response.ContentType = "text/xml"; 
    Response.Write(myXml); 
    Response.Flush(); 
    Response.Close(); 
} 

Comme une note de côté, WCF ne fait la même chose. Si vous définissez une opération de service WCF:

[OperationContract] 
public string myFunc() 
{ 
    return "hi"; 
} 

Le retour XML (qui est en fait plus enveloppé dans SOAP) est <string>hi</string> Tout comme vous avez ici avec les services Web classiques. C'est un peu plus difficile de «déballer» ce XML dans WCF. vous devez faire un rédacteur de message personnalisé, IIRC.

1

Pour supprimer la chaîne, vous devrez faire le paramètre de retour xml comme ceci:

public **System.Xml.XmlDocument** MyFunc(string xmlRequest) 

Cela rendra la réponse devient;

HTTP/1.1 200 OK 

Content-Type: text/xml; charset=utf-8 

Content-Length: length 


<?xml version="1.0" encoding="utf-8"?> 
xml