Предоставление интерфейса WCF существующему набору классов - PullRequest
1 голос
/ 26 мая 2011

Я унаследовал приложение, которое логически разделено на 4 уровня, но физически находится на двух уровнях. 4 логических уровня:

  1. сайт asp.net
  2. бизнес-логика в сборке C # .Net (ссылка на веб-сайте)
  3. доступ к данным сборка c # - классы, сгенерированные инструментом Cossmith (на основании бизнес-логики)
  4. база данных sql сервера

Пример того, как веб-сайт взаимодействует с бизнес-уровнем:

Booking b = new Booking();
b.property1 = x;
b.property2 = y;

result = b.method();

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

К сожалению, существует множество свойств, и некоторые из них не являются базовыми типами, они являются другими объектами, например, объект Booking содержит коллекцию объектов Vouchers

Мне нужно сделать уровни 2-4 доступными для нового пользовательского интерфейса (совсем другой веб-сайт, который будет обслуживать киоски в магазине).

Я бы хотел раскрыть бизнес-уровень через WCF. Я создал интерфейс IBooking, определил сигнатуры методов и декортировал их с помощью [OperationContract] и т. Д. Я застрял в том, как управлять данными. Я понимаю, что мог бы определить контракт данных, чтобы соответствовать различным общедоступным свойствам объекта Booking, но тогда мне нужно было бы внести существенные изменения в существующий веб-сайт - вместо того, чтобы устанавливать свойства и вызывать метод без параметров, которые необходимо будет заполнить экземпляр контракта данных и передача его в качестве параметра для каждого вызова метода.

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

Большое спасибо,

Rob.

1 Ответ

2 голосов
/ 26 мая 2011

Я бы предположил, что самым простым способом реализации этого было бы создание оболочки WCF для существующей бизнес-логики без изменения вашего текущего веб-сайта. Это можно сделать без каких-либо (существенных) изменений кода в том, что у вас уже есть. Недостатком, если вы считаете это таковым, является то, что ваш существующий веб-сайт не будет использовать ваши услуги WCF.

Вы уже создали договор на обслуживание. Если вы этого еще не сделали, создайте контракты сообщений для параметров операции. Затем вы можете создать свой «новый» веб-сайт, работая с контрактом на обслуживание и контрактами на сообщения.

Службы отличаются от ОО в том, что вы обычно не устанавливаете свойства и затем вызываете методы без параметров - вместо этого вы вызываете операцию и одновременно включаете все необходимые необходимые данные. Ваша реализация сервиса - класс, который реализует контракт IBooking - выполнит работу

  • создание экземпляров существующих классов
  • заполнение этих объектов
  • вызов методов без параметров и
  • возврат результатов.

например.

// contract
[OperationContract]
MyResponseMessage DoMethod(MyResultRequest requestData);

// and the implementing class (the 'service')
public MyResponseMessage DoMethod(MyResultRequest requestData)
{
    MyResponseMessage responseData = new MyResponseMessage();

    Booking b = new Booking(); 
    b.property1 = requestData.X; 
    b.property2 = requestData.y;
    responseData = b.method(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...