这怎么会这么困难,为什么?返回不带名称空间和XML十进制的简单XML。使用XML Writer创建XML很容易完成,如果我将它输出到一个文件那么很好。你怎么可以通过WCF返回内容。使用XML元素不好,因为您丢失了XML声明,并且使用字符串不好,因为输出包含在<字符串>元素中。无法返回XML文档,因为它无法序列化。用WCF返回普通旧XML
我知道这个网站上有很多帖子,但是没有人回答这个问题。我正在使用VB.NET(我希望我有时间学习C#),并且即使使用IXmlSerializer,我也无法使数据协定工作。输出我需要通过WCF服务发回的一个例子是:
<?xml version="1.0" encoding="utf-8"?>
<BookingResponse timestamp="" success="1">
<confirmation id="" track_code="" status="" notes="" tracking_url="" confirmed_at=""/>
</BookingResponse>
不幸的是,我发送给该服务不会接受比这个简单的XML的任何其他。它不会接受WCF似乎通过它自己填充的额外名称空间。
我现在用的是在线休息模板VB,可用于Visual Studio 2010中
帮助!请!有人必须有答案?
下面是一些代码:
<WebInvoke(UriTemplate:="BookJob", Method:="POST")>
Public Function Create(ByVal XMLBooking As Stream) As Stream
'DO SOME PROCESSING ON THE REQUEST - THIS ALL WORKS FINE.....
Dim str As String
'This CreateResponseXML function creates a String version of the XML, which is built using XMLWriter.
str = CreateResponseXML(True, vConfirmationID, sqlFuncs.BookingStatus("Confirmed"), "", "")
Dim memoryStream As New MemoryStream()
Using streamWriter As New StreamWriter(memoryStream)
streamWriter.Write(str)
streamWriter.Flush()
memoryStream.Position = 0
Return memoryStream
End Using
End Function
要添加到他们必须使用安全连接无驱。我正在使用Visual Studio 2010的在线休息模板,该模板与我在任何地方看到的普通桌面相比,显着减少了web.config中的条目。它看起来像这样 :
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<bindings>
<webHttpBinding>
<binding transferMode="Streamed">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.vb file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" faultExceptionEnabled="true">
<security mode="Transport" />
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
我试过前面的一个MemoryStream返回此代码,但他们得到的回应被包在一个MemoryStream元素,是gobbldegook(但这可能是由于我中省略的事实的transferMode =“流”在web.config条目。这个版本返回什么都没有。
什么想法?
感谢你的这一点,我的确想到了这一点。如果他不使用Microsoft工具,接收者是否能够查看流内的文本? – Tim
@tim绝对。你要返回的只是一串字节。不要忘记将内容类型标题设置为适当的媒体类型。 –
嗨Darrel,刚刚有一个回应,他们无法读取流。我使用并返回一个MemoryStream。这是我的问题,我如何将内存流转换为普通的流? – Tim