Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将VXML格式用于WCF REST服务响应(XML)格式?_Wcf_Rest - Fatal编程技术网

是否将VXML格式用于WCF REST服务响应(XML)格式?

是否将VXML格式用于WCF REST服务响应(XML)格式?,wcf,rest,Wcf,Rest,我已经使用WCF和HTTPPOST方法创建了一个RESTWeb服务。请求和响应对象都是纯xml。与响应对象类似,响应对象是: <Response xmlns="http://WebService/WCF" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Approved>true</Approved> <ApprovedCode>OK242C0010063439: X:</Appro

我已经使用WCF和HTTPPOST方法创建了一个RESTWeb服务。请求和响应对象都是纯xml。与响应对象类似,响应对象是:

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

真的
OK242C00010063439:X:
106
D1FB8F95-4B50B216-295-14442
批准代码:OK242C00010063439:X:
现在,客户要求我们将格式更改为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


谢谢你的帮助!:)

更改合同以返回流,并使用XmlWriter写入内存流并返回该流。

Darrel,我曾尝试使用流,但当我使用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;
它不显示Fiddler中的内容

编辑:

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

已添加,并且响应内容显示正确

我现在就试试。谢谢。如果通过,将标记为答案:)嗨,Darrel,我尝试过使用流,但除了响应头显示内容类型为application/octet Stream外,我没有得到任何结果。有什么建议吗?谢谢嗨,达雷尔,它起作用了。我只需要将MemoryStream的位置设置为0。非常感谢你!谢谢。