对于WCF REST服务响应(XML)格式使用VXML格式?

问题描述:

我已经使用WCF创建了REST Web服务并使用了HTTP Post方法。请求和响应对象都是纯xml。就像响应对象是:对于WCF REST服务响应(XML)格式使用VXML格式?

<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> 

现在客户要求我们改变格式的VoiceXML格式如下图所示:

<?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> 

我想知道如果有一个简单的方法来做到这一点的转变。目前我在想的是为响应对象构建并返回一个纯字符串而不是XML。

谢谢你的帮助! :)

更改您的合同以返回Stream并使用XmlWriter写入内存流并返回该内容。

+0

现在会尝试。非常感谢。将标记为答案如果通过:) – Zhao 2010-01-27 14:25:25

+0

嗨,达雷尔,我试图使用流,但我没有结果回来,除了响应头显示内容类型是应用程序/八位字节流。任何建议?谢谢! – Zhao 2010-01-27 15:42:13

+0

嗨,达雷尔,它的工作原理。我只需要将MemoryStream的位置设置为0.非常感谢!欣赏它。 – Zhao 2010-01-27 16:13:43

达雷尔,我曾尝试使用流,但是当我使用Fiddler 2测试,我只得到了以下内容:

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 

我使用的MemoryStream,代码如下所示:

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; 

它不显示提琴手中的内容。

编辑:

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

,并将响应内容显示正确。