2010-02-11 3 views
1

Мне нужно создать веб-службу .Net (WCF не может быть и речи), которая должна получить xml и вернуть xml. Я изначально настроил такую ​​функцию:. Сетевой контент .Net-контента

[WebMethod] 
public string myFunc(string xmlRequest) 
{ 

Как изменить тип содержимого HTTP POST в text/xml? Кроме того, я возвращаюсь в ответ XML в виде строки, а в справочной странице веб-службы говорится, ответ будет:

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://www.mysite.com/myFunc">string</string> 

Мне нужно удалить этот корень <string> элемент каким-то образом.

Этот веб-сервис вызывается другой компанией, которая, вероятно, не использует .Net для размещения XML в виде текста/xml для моей конечной точки.

ответ

1

У меня есть веб-служба с открытым исходным кодом (работает на .NET и Mono), что значительно упрощает усилия, необходимые для создания веб-сервисов. Она автоматически конфигурируется, чтобы обеспечить XML (+ REST), JSON (+ REST), SOAP 1.1/1.2 конечные точки для всех ваших веб-служб:

Она доступна из:

http://www.servicestack.net/

И есть живая Javascript и Silverlight доступна демонстрационная версия (работает на CentOS/Nginx) по адресу: http://www.servicestack.net/ServiceStack.Examples.Clients/Default.htm

и онлайн учебник доступны, что идет процесс создания и использования веб-служб (для MonoTouch, но применимо везде) доступны здесь:

http://www.servicestack.net/monotouch/remote-info/

0

Действительный документ XML должен содержать корневой элемент. Это не XML, если нет элемента string. В противном случае это будет простой текстовый ответ.

0

Держись, ты хотел опубликовать свои данные в виде XML, но получить его обратно в виде строки XML? Если я не неправильно понял то, что вы говорите, это, безусловно, звучит так, как будто вы делаете, и это кажется совершенно неправильным, если честно.

Не можете ли вы проанализировать строку в XML-документе в веб-службе и в чем причина того, что другая компания не может справиться с XML-документом с единственным узлом? Разве они не могут получить строковое значение из этого единственного узла, а затем сами проанализировать XML-строку?

0

Ну элемент <string> отображается как есть, потому что ваш метод определен для возврата строки. За кулисами .NET фактически просто принимает любой объект, возвращаемый вашим методом, и сериализует его. Сериализованная строка представлена ​​как <string>actual string contents</string>.

Что бы вы хотели сделать, так или иначе вернуть объект, который сериализуется именно в нужное вам сообщение, или, предположив, что ваша строка на самом деле содержит XML, записывайте его непосредственно в поток ответов.

Я никогда на самом деле пытался, что из [WebMethod], но могущества работы что-то вроде этого:

[WebMethod] 
public void myFunc(string xmlRequest) 
{ 
    var myXml = @"<?xml version="1.0" encoding="utf-8"?><myRoot><myElement /></myRoot>"; 
    Response.ContentType = "text/xml"; 
    Response.Write(myXml); 
    Response.Flush(); 
    Response.Close(); 
} 

Как примечание стороны, WCF на самом деле делает то же самое. Если определить операцию WCF службы:

[OperationContract] 
public string myFunc() 
{ 
    return "hi"; 
} 

Возвращенный XML (который на самом деле разбиваться в SOAP) является <string>hi</string> Так же, как вы здесь с классическими веб-сервисов. Его немного больнее «разворачивать» этот XML в WCF. вы должны создать собственный писатель сообщений, IIRC.

1

Чтобы удалить строку, вы должны сделать обратный параметр XML так:

public **System.Xml.XmlDocument** MyFunc(string xmlRequest) 

Это заставит ответ стать;

HTTP/1.1 200 OK 

Content-Type: text/xml; charset=utf-8 

Content-Length: length 


<?xml version="1.0" encoding="utf-8"?> 
xml 
Смежные вопросы