這怎麼會這麼困難,爲什麼?返回不帶名稱空間和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