Имею Remotable Business Object (MarshalByRef, server activated, singlecall) который дергает Data Object (static, not remotable) и получает Dataset.
Проблема - что я сделал не так что при попытке вызова DataObject клиент требует копию DataObject.dll ... иначе не работает ( что не так?
код примерно такой...
Business: - References: DataObject, System.Data и так далее...
public class BusinessObject : MarshalByRefObject {
public TypeDataSet GetTypedDataSet(...){
DataSet ds = DataObject.GetDataSet(...);
TypedDataSet TDS = new TypedDataSet ();
TDS.Merge(ds,false, System.Data.MissingSchemaAction.Ignore);
return ds;
}}
DataObject - References: System.Data и так далее...
public class DataObject{
public static DataSet GetDataSet(...){
... получаем DataSet...
}}
Client - References: BusinessObject, System.Data и так далее...
....
public void GetSomeThing(...)
BusinessObject BO = new BusinessObject();
TypeDataSet ds = BO.GetTypedDataSet(...){...}
....
Client вызывает remote BusinessObject (Wellknown, singlecall).
Схема на TypedDataSet описана в BusinessObject-е
question about C# (remoting)
-
- Уже с Приветом
- Posts: 234
- Joined: 30 Nov 1999 10:01
- Location: Omsk, Russia->Norwalk, CT->Detroit, MI, ->Bethel CT, -> Cary NC USA
question about C# (remoting)
================================
RGDS,Andy
================================
RGDS,Andy
================================
-
- Уже с Приветом
- Posts: 11332
- Joined: 30 Mar 2000 10:01
- Location: Ice Storm Town
До конца детали не ясны, но возможно соединение с удаленным сервером не может иницилализироватся (по какой либо причине - скорее всего неправильная конфигурация) и слиент пытается создать не удаленный а локальный вариант BusinessObject (он будет делать это по умолчание всегда когда нет связи и вы вызываете new), который и пытается загрузить DataObject.
Вообще не очень привычный дизайн. Обычно если вы работаете с SAO, то логичнее работать с интерфейсами а не с классами. Классы обычно используют с CAO.
Вообще не очень привычный дизайн. Обычно если вы работаете с SAO, то логичнее работать с интерфейсами а не с классами. Классы обычно используют с CAO.
-
- Новичок
- Posts: 44
- Joined: 21 Mar 2003 12:44
Вы очевидно устанавливаете DLL с вашим BusinessObject на клиентскую машину, а при загрузке она тянет другие модули на которые ссылается (DataObject.dll). Т.е. нужно на клиента поставить и их, что выглядет не очень красиво.
Чтобы не устанавливать серверные модули на клиента нужно обеспечить развязку. Для этого можно сделать сборку с таким же именем файла, strong name (если есть) и версией как у вашей серверной сборки (BusinessObject.dll) и определить в ней класс с таким же именем (BusinessObject), методы этого класса могут быть пустыми, т.к. вызываться они всё-равно не будут (это не относится к статическим методам!!!).
public class BusinessObject : MarshalByRefObject {
public TypeDataSet GetTypedDataSet(...){
return null;
}}
И конечно же эта сборка не должна ссылатся на другие серверные компаненты: DataObject.dll и др.. Вот именно с ней и дожен работать клиент. Хоть это способ и не рекомендуют, он реально работает.
Чтобы не устанавливать серверные модули на клиента нужно обеспечить развязку. Для этого можно сделать сборку с таким же именем файла, strong name (если есть) и версией как у вашей серверной сборки (BusinessObject.dll) и определить в ней класс с таким же именем (BusinessObject), методы этого класса могут быть пустыми, т.к. вызываться они всё-равно не будут (это не относится к статическим методам!!!).
public class BusinessObject : MarshalByRefObject {
public TypeDataSet GetTypedDataSet(...){
return null;
}}
И конечно же эта сборка не должна ссылатся на другие серверные компаненты: DataObject.dll и др.. Вот именно с ней и дожен работать клиент. Хоть это способ и не рекомендуют, он реально работает.
-
- Уже с Приветом
- Posts: 234
- Joined: 30 Nov 1999 10:01
- Location: Omsk, Russia->Norwalk, CT->Detroit, MI, ->Bethel CT, -> Cary NC USA