【发布时间】:2011-10-22 09:52:03
【问题描述】:
这怎么会这么难,为什么?返回没有名称空间和 XML 声明的简单 XML。使用 XML Writer 创建 XML 很容易,如果我将其输出到文件中,那就太好了。到底如何通过 WCF 返回内容。使用 XML 元素不好,因为您松开了 XML 声明,而使用字符串也不好,因为输出包装在
我知道这个网站上有很多帖子,但没有一个回答这个问题。我正在使用 VB.NET(男孩,我希望我有时间学习 C#),即使使用 IXmlSerializer,我也无法让 Data Contract 工作。我需要通过 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 似乎自行放入的其他名称空间。
我正在使用适用于 Visual Studio 2010 的 VB 在线休息模板。
帮助!请!一定有人有答案吗?
这里有一些代码:
<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 的适用于 VB 的 Online Rest 模板,与我在各处看到的普通条目相比,它显着减少了 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="Streamed" 条目.config。这个版本什么都不返回。
有什么想法吗?
【问题讨论】: