Живут ли вместе RFD и Enterpise Services?
От: Аноним  
Дата: 05.01.06 11:12
Оценка:
Hi All!

А что может сказать многоуважаемая общественность по возможности использования RFD совместно с COM+/Enterprise Services. И особенноинтересно в распределенной архитектуре, с вынесенным во внешний COM+ Application бизнес слоем (и потенциально на отдельную внешнюю машину)?

Попробовал я тут сделать простенкий тест (аналогичный хрестоматийному MS PetShop). BLL сделан как ServicedComponents в свою очередь ссылающийеся на DAL объекты, которе собственно используют RFD для получения данных. Данные, загружаемые через RFD, представлены простеньким классиком (даже не интерфейсом) ItemInfo с пятком строковых полей.

Так вот, при поптыке вызвать такой BLL — тут же получил по фейсу ексепшном (см ниже) насколько я подозреваю, лезущий как раз от природы динамически генеримого RFD кода... (полный вид ругани в деталях – см ниже. Ключевые места выделены жирным). Впечатление как раз что тут и лезет как раз known issue RFD, что маппер создаёт наследуемый от абстрактного класса класс, полное имя которого отличается от оригинального и строится как NamespaceName.AbstractClassName.MappingExtension.AbstractClassName
тогда как COM+ похоже что пытается грузить по ссылке в асембли класс именуемый NamespaceName.AbstractClassName

Такое впечатление, что это ограничение практически означает невозможноть использования RFD совместно с Enterprise Services? Или я где-то ошибаюсь?

Есть ли у кого опыть реального использования RFD в распределенных архитектурах? Через COM+ или remoting? Если есть — хотелось бы услышать мнение о том насколько оно жизненно с RFD. А то как-то грустно получается — вроде как фремворчина красивая и удобная, а и не заюзать толком

Спасибо,
Александр.


Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: The located assembly's manifest definition with name 'Fd.Model.ItemInfo.MapDescriptor' does not match the assembly reference.

Source Error:

Line 198: <add assembly="System.EnterpriseServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 199: <add assembly="System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 200: <add assembly="*"/>
Line 201: </assemblies>
Line 202: </compilation>

Source File: c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config Line: 200

Assembly Load Trace: The following information can be helpful to determine why the assembly 'Fd.Model.ItemInfo.MapDescriptor' could not be loaded.

=== Pre-bind state information ===
LOG: DisplayName = Fd.Model.ItemInfo.MapDescriptor
(Partial)
LOG: Appbase = file:///D:/Documents/AW/Tests/RfdTry/Fd/FdWeb
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
===

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: Fd.Model.ItemInfo.MapDescriptor
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/fd/7efe3233/7178912e/Fd.Model.ItemInfo.MapDescriptor.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/fd/7efe3233/7178912e/Fd.Model.ItemInfo.MapDescriptor/Fd.Model.ItemInfo.MapDescriptor.DLL.
LOG: Attempting download of new URL file:///D:/Documents/AW/Tests/RfdTry/Fd/FdWeb/bin/Fd.Model.ItemInfo.MapDescriptor.DLL.
WRN: Comparing the assembly name resulted in the mismatch: NAME

________________________________________
Version Information: Microsoft .NET Framework Version:1.1.4322.573; ASP.NET Version:1.1.4322.573
Re: Живут ли вместе RFD и Enterpise Services?
От: vdimas Россия  
Дата: 23.01.06 20:48
Оценка:
Здравствуйте, Аноним, Вы писали:

Может стоит выложить пример целиком?
Re[2]: Живут ли вместе RFD и Enterpise Services?
От: aio2000  
Дата: 25.01.06 14:50
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


V>Может стоит выложить пример целиком?



Да в общем-то без проблем, все достаточно тривиально и до безобразия просто...

Сборка Model содержит примитивный entity классик

    [Serializable]
    public class ItemInfo
    {
        [MapField("ProductID")]
        public string ItemID;
        public string Category;
        public string Name;
        public string Descn;
    }

Сборка DAL содержит собственно загрузку коллекции этих самых entities

    public class Item
    {
        public ArrayList GetItems()
        {
            using (DbManager db = new DbManager("Fd"))
            {
                return db
                    .SetCommand(@"
                SELECT 
                    ProductID,
                    Category,
                    Name,
                    Descn
                FROM Product
                ORDER BY Name")
                    .ExecuteList(typeof(ItemInfo));
            }
        }
    }

Сборка BLL собственно является COM+ компонентом и не делает ничего умнее чем вызов DAL и возврат загруженой им коллекции

    [Guid("EB0335AA-B9B4-46ba-87AF-C30495D466DF")]
    public class Catalog : ServicedComponent
    {
        public Catalog()
        {
        }

        public ArrayList GetItems()
        {
            Item itms = new Item();
            return itms.GetItems();
        }
    }

Ну и наконец ASP.NET приложение, которое собственно дергает BLL.Catalog и пытается отрисовать элементы

    public class Default : System.Web.UI.Page
    {
        ...
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            Catalog cat = new Catalog();
            ArrayList items = cat.GetItems();
            foreach (ItemInfo itm in items)
            ...
        }
        ...
    }

Все сборки корректно подписаны, в COM+ зареганы. И такая вот простота не желает под COM+ работать, вылетая с вышеозначеным exception.

Если у кого есть идеи как побороть, буду крайне признателен.

Спасибо,
Александр.

Подправлено форматирование. IT
Re[3]: Живут ли вместе RFD и Enterpise Services?
От: aio2000  
Дата: 27.01.06 13:35
Оценка:
Уточнение курса... похоже что не работает только в случае активации COM+ компонента как Application. Если активацию ставить Library то работает, что не может не радовать. Однако переключение на Application вызывает тот самый сбой, и самое интересное что после этого, если переключить назад на Library, сбой остается! Лечится только полной вычисткой IIS и COM+ приложения, пересборкой и регистрацией компонента снова как Library. Вот так...

Напрашивается грустная мысль — в распределенной среде, с COM+ уровнем на внешней машине жить не будет скорее всего...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.