Организация классов удаленного взаимодействия C #

Я разрабатываю библиотеку классов удаленного взаимодействия, чтобы поддерживать взаимодействие с базой данных и бизнес-объекты на сервере, а не на клиентах.

Я хотел бы иметь возможность возвращать свои объекты клиентам, чтобы они могли взаимодействовать с ними через сам сервер.

Например (полу-псевдокод):

Сервер

class Database { ... }
class Utility
{
  public User getUser(username)
  {
     return new User(username);
  }
}
class User
{
  public string[] getPerms()
  {
    return Database.query("select * from permission where user = " + this.username);
  }
}

Клиент

Utility utility = (Utility)getRemotingClass("Utility");
User user = Utility.getUser("admin");
string[] perms = user.getPerms();

Как я могу организовать свои классы / пространства имен? Меня особенно интересуют ссылки на классы и масштабируемость моей системы.

Любая критика / предложение действительно приветствуется.


person Keeper    schedule 25.06.2010    source источник
comment
Почему вы не хотите использовать WCF?   -  person Incognito    schedule 25.06.2010
comment
Потому что я плохо это знаю. Я попробую.   -  person Keeper    schedule 25.06.2010


Ответы (2)


Я не хочу бить по барабану, но вы, возможно, захотите изучить WCF. Удаленное взаимодействие очень болезненно, и реальная поддержка поддержки чистых интерфейсов с помощью .Net осуществляется через WCF и передачу сообщений, в отличие от полного управления состоянием объекта посредством удаленного взаимодействия.

Похоже, вы разрабатываете средний уровень для управления соединениями с базой данных. Просто убедитесь, что вам не придется переделывать интерфейс для SQL-сервера.

person Spence    schedule 25.06.2010
comment
Итак, с помощью WCF я могу передавать свои собственные классы, как в приведенном выше примере? Вы знаете, где найти такие примеры? Спасибо - person Keeper; 25.06.2010
comment
Все, для чего вы можете создать контракт данных, можно отправить через WCF. Вы даже можете отправлять потоки с помощью WCF, который отлично подходит для очень больших передач. - person Spence; 25.06.2010

Я стараюсь помещать все общие классы (объект передачи данных) в отдельную библиотеку DLL, которая является ссылкой на сервер и клиент (вы можете поместить их в ту же DLL, что и классы сервера, если вы собираетесь распространять ее с помощью клиентский код в любом случае).

Помещая их в отдельную сборку, вы усиливаете разъединение DTO и базовой технологии, используемой для их удаленной передачи. Это означает, что если вы в конечном итоге переписываете технологию удаленного вызова, вам не придется прикасаться к DTO, и вы можете просто повторно использовать сборку.

Не забудьте пометить DTO как атрибут [Serailizable], чтобы их можно было передавать между клиентом и сервером.

Herbie

person Dr Herbie    schedule 25.06.2010