У меня есть веб-приложение .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 отображает в качестве ответа.
Похоже, вы отправляете в сервис плохо сформированный XML-документ. Можете ли вы использовать Fiddler или что-то подобное, чтобы получить копию фактического звонка, который идет в веб-службу? Это было бы огромной помощью в выяснении, в чем проблема.
Вы используете Flex 3? Если это так, вы можете установить точку останова при выполнении веб-службы и фактически пройти через среду Flex, поскольку она кодирует ваш запрос. Загляните в mx.rpc.soap.SoapEncoder, и вы сможете точно увидеть, что будет отправлено по сети.
Недавно я использовал интерфейс .NET REST, который я использовал с помощью приложения Flex. Я также получил некоторые странные исключения, и моя проблема заключалась в том, что я забыл включить xmlns (пространство имен) в корневой элемент при отправке запросов. Это дикое предположение, но я надеюсь, что это поможет.