Flex и службы данных ADO.NET… кто-нибудь это делал?
Вопрос
Кто-нибудь использовал службы данных ADO.NET в качестве источника данных для приложений Adobe Flex?Если да, то каких историй успеха или трагедий следует избегать?Если вы им пользовались, как вы справлялись с безопасностью?
Решение
Я использую WebORB для .NET для удаленного взаимодействия Flex, а затем использую DLINQ на сервере.Одна сложность в использовании LINQ с WebORB заключается в том, что WebORB использует Reflection для автоматического извлечения всех связей объектов, которые вы возвращаете во Flex.Это приводит к серьезным потерям времени, поскольку LINQ использует отложенную загрузку для загрузки связей.Чтобы этого не произошло, я делаю что-то вроде следующего:
Переопределите конструктор DataContext и добавьте следующий код:
this.DeferredLoadingEnabled = false;
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Order>(q => q.Payments);
dlo.LoadWith<Order>(q => q.Customer);
this.LoadOptions = dlo;
Это сообщает DataContext отключить отложенную загрузку связей и, в частности, указывает ему загружать только те связи, которые вам нужны, без отложенной загрузки.Таким образом, WebORB не вызывает ленивой загрузки через Reflection, а количество связей, передаваемых во Flex, сводится к минимуму.
Надеюсь, это вам каким-то образом поможет.Это определенно одна из тех маленьких «ошибок» при работе с Flex/WebORB и LINQ.
Другие советы
Да, мы широко используем Flex с веб-сервисами .Net.
Flex не может обрабатывать наборы данных .Net или даже сложные типы XML.Мы обнаружили, что лучше всего придерживаться относительно простого вывода в формате XML.
Однако, если вы это сделаете, он сможет нормально обрабатывать выходные данные веб-службы .Net:
<mx:WebService id="myDataService" showBusyCursor="true">
<mx:operation name="WebMethodName"
resultFormat="object"
result="functionFiredOnComplete();">
</mx:operation>
</mx:WebService>
public function load():void
{
myDataService.loadWSDL( "web method's wsdl" );
myDataService.WebMethodName.send( params );
}
public function functionFiredOnComplete():void
{
// get data
var myData:Object = myDataService.WebMethodName.lastResult;
...
Он спросил о службах данных ADO.NET, а не о веб-сервисе.
Flex может только получить, и Post Flex не понимает HTTP -ответные сообщения
Таким образом, чтобы Flex мог взаимодействовать со службами данных ADO.NET, вам необходимо либо;
1.используйте прокси-сервер, но вам придется найти или создать его самостоятельно
2.измените входящие запросы и используйте $method=MERGE и т. д. (так же, как прокси)
3.используйте другой клиент as3 httpService, есть некоторые инициативы с открытым исходным кодом
Затем вам нужно узнать, как публиковать данные, и это потребует много времени, если вы хотите создать новую запись с помощью JSON и указать идентификатор, который имеет ссылку на другую таблицу.Это потому, что вы не можете просто обновить целое число, а вместо этого вам нужно создать строку ссылки, и это не так-то просто.
Так что, конечно, это можно сделать, но из коробки вам действительно придется сделать это самостоятельно.Я знаю, что Flash Builder 4 будет поставляться с импортом REST, это может ускорить работу, но у меня нет для этого опыта.