SoapException: корневой элемент отсутствует, происходит, когда веб-сервис .NET вызывается из Flex

У меня есть веб-приложение .net, в которое встроено приложение Flex на странице. Это гибкое приложение вызывает веб-сервис .net. Я могу отследить процесс выполнения через отладчик, и все выглядит великолепно, пока я не получу ответ:




soap:ReceiverSystem.Web.Services.Protocols.SoapException: Server was unable to process request

. ---> System.Xml.XmlException: Root element is missing.

   at System.Xml.XmlTextReaderImpl.Throw(Exception e)

   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)

   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()

   at System.Xml.XmlTextReaderImpl.Read()

   at System.Xml.XmlTextReader.Read()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()

   at System.Xml.XmlReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()

   at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()

   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()

   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)

   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()

   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest

 request, HttpResponse response, Boolean& abortProcessing)

   --- End of inner exception stack trace ---

Вызов из flex выглядит хорошо, выполнение через веб-сервис - это хорошо, но это ответ, который я фиксирую через wireshark, что здесь происходит?

Я пробовал несколько веб-методов, от "Hello World" до парализованных методов ... все возвращаются с одинаковым ответом ...

Я подумал, что это может быть связано с кодировкой «--- & gt», но я не уверен, как контролировать то, что .net отображает в качестве ответа.

17.08.2008 17:58:57
3 ОТВЕТА

Похоже, вы отправляете в сервис плохо сформированный XML-документ. Можете ли вы использовать Fiddler или что-то подобное, чтобы получить копию фактического звонка, который идет в веб-службу? Это было бы огромной помощью в выяснении, в чем проблема.

1
18.08.2008 22:07:24
Если запрос был искажен, я не думаю, что смогу увидеть нормальное выполнение через веб-сервис с отладчиком ... не так ли?
mmattax 19.08.2008 12:32:58

Вы используете Flex 3? Если это так, вы можете установить точку останова при выполнении веб-службы и фактически пройти через среду Flex, поскольку она кодирует ваш запрос. Загляните в mx.rpc.soap.SoapEncoder, и вы сможете точно увидеть, что будет отправлено по сети.

0
17.09.2008 00:47:15

Недавно я использовал интерфейс .NET REST, который я использовал с помощью приложения Flex. Я также получил некоторые странные исключения, и моя проблема заключалась в том, что я забыл включить xmlns (пространство имен) в корневой элемент при отправке запросов. Это дикое предположение, но я надеюсь, что это поможет.

1
28.09.2008 05:04:59