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 выглядит хорошо, выполнение через веб-сервис хорошее, но это ответ, который я фиксирую через wirehark, что здесь происходит?

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

Я думал, что это может иметь какое-то отношение к кодировке с помощью "--- & gt", но я не уверен, как контролировать, что .net отображает в качестве ответа.

Ответов (3)

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

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

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