Как это может быть так сложно и почему? Возврат простого XML без пространств имен и декарации XML. Создать XML с помощью XML Writer легко, и если я выведу его в файл, то это здорово. Как на земле вы можете вернуть содержимое через WCF. Использование XML-элемента бесполезно, поскольку вы теряете объявление XML, а использование строки не годится, поскольку выходные данные заключены в элемент . Невозможно вернуть документ 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
Чтобы добавить к себе, они должны использовать безопасное соединение. Я использую шаблон онлайн-отдыха для VB, доступный для 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 = "Streamed" в Интернете .config. Эта версия вообще ничего не возвращает.
Есть идеи?