2010-01-26 4 views
1

J'ai créé un service Web REST à l'aide de WCF et utilise la méthode HTTP Post. Les objets de requête et de réponse sont tous en XML pur. Comme l'objet de réponse est:Utilisez le format VXML pour le format de réponse au service (XML) REST de WCF?

<Response xmlns="http://WebService/WCF" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<Approved>true</Approved> 
<ApprovedCode>OK242C0010063439: X:</ApprovedCode> 
<ValidationLogID>106</ValidationLogID> 
<OrderNumber>D1FB8F95-4B50B216-295-14442</OrderNumber> 
<RetString>Approval Code: OK242C0010063439: X:</RetString> 
</Response> 

Maintenant, le client nous demander de modifier le format au format VoiceXML comme ci-dessous:

<?xml version="1.0" ?> 
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"> 
<form id="Response"> 
    <var name="Approved" expr="'true'" /> 
    <var name="RetString" expr="'Approval Code: OK242C0010063439: X:'" /> 
    <var name="ApprovedCode" expr="'OK242C0010063439: X:'" /> 
    <var name="ValidationLogID" expr="'106'" /> 
    <var name="OrderNumber" expr="'D1FB8F95-4B50B216-295-14442'" /> 
    <block> 
      <return namelist="Approved RetString ApprovedCod ValidationLogID OrderNumber" /> 
    </block> 
    </form> 
</vxml> 

Je me demande s'il y a un moyen simple de faire cette transformation. Actuellement ce que je pense est de construire et renvoyer une chaîne normale au lieu de XML pour l'objet de réponse.

Nous vous remercions de votre aide! :)

Répondre

2

Modifiez votre contrat pour renvoyer un flux et utilisez un XmlWriter pour écrire dans un flux de mémoire et le renvoyer.

+0

va essayer ça maintenant. Merci beaucoup. Marquer comme réponse si passé :) :) – Zhao

+0

Salut, Darrel, j'ai essayé d'utiliser Stream, mais je n'ai obtenu aucun résultat sauf que l'en-tête de réponse montre que le type de contenu est application/octet-stream. Toute suggestion? Merci! – Zhao

+0

Bonjour, Darrel, ça marche. J'ai juste besoin de mettre la position de MemoryStream à 0. Merci beaucoup! Appréciez-le. – Zhao

0

Darrel, j'ai essayé d'utiliser Stream, mais quand je teste avec Fiddler 2, je n'ai le contenu suivant:

HTTP/1.1 200 OK 
Content-Length: 0 
Content-Type: application/octet-stream 
Server: Microsoft-HTTPAPI/1.0 
Date: Wed, 27 Jan 2010 15:37:27 GMT 

je MemoryStream, le code est indiqué ci-dessous:

Stream st = new MemoryStream(); 
    XmlWriterSettings xms = new XmlWriterSettings(); 
    using (XmlWriter writer = XmlWriter.Create(st, new XmlWriterSettings())) 
    { 
     //do some writing 
     writer.WriteStartElement("vxml", "http://www.w3.org/2001/vxml"); 
     writer.WriteAttributeString("version", "2.0"); 
     writer.WriteStartElement("form"); 
     writer.WriteAttributeString("id", "CompositeType"); 
     writer.WriteStartElement("var"); 
     writer.WriteAttributeString("name", "BoolValue"); 
     writer.WriteAttributeString("expr", composite.BoolValue.ToString()); 
     writer.WriteEndElement(); 
    } 
    st.Flush(); 
    //this line is necessary, otherwise the returned content is 0 
    st.Position = 0; 
    return st; 

Il n'affiche pas le contenu de Fiddler.

Edit:

st.Flush(); 
//this line is necessary, otherwise the returned content is 0 
st.Position = 0; 

est ajoutée et l'émission de contenu de la réponse correcte.

Questions connexes