Winforms взаимодействует с сервером приложений - PullRequest
0 голосов
/ 14 октября 2010

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

Теперь я знаю об общении через Интернет (в основном это mq), но я в полной растерянности относительно того, как позволить моему клиентскому приложению Winforms общаться с сервером приложений для вызова служб.

Каков наилучший способ сделать это? Я прочитал все о Nhibernte, DDD, WCF, удаленном взаимодействии и т. Д., Но я просто не понимаю, как сделать это правильно? Как спроектировать сервисы (поскольку модель настолько расширяется, это будет ОЧЕНЬ болтливый интерфейс против ОЧЕНЬ короткого интерфейса)

В общем: каков наилучший способ, позволяющий приложению winforms общаться с бэкэндом (многоуровневым), и есть ли хорошие примеры того, как это реализовать (включая все уровни, потому что большинство примеров останавливаются на границах служб)

Ответы [ 4 ]

1 голос
/ 14 октября 2010

Я бы использовал WCF и несколько интерфейсов для определения сервисов, которые используются для доступа к бэкэнду.

Application.BusinessLayer

Определяет все интерфейсы WCF + сущности домена. Используется winform и backend.

Интерфейс может выглядеть так:

[ServiceContract]
public inteface IUserService
{
    [OperationContract]
    IEnumerable<User> Find(string searchWord);
}

Это все, что вам нужно для определения службы WCF.

Application.Service

Ваш бэкэнд. Реализует все интерфейсы.

Вы можете настроить WCF с помощью файла конфигурации или по коду. Службы WCF могут работать либо внутри приложения ASP.Net, либо в ServiceHost.

Application.WinClient

Приложение winform.

Вы можете добавить ссылку на службу, если ваше приложение на веб-службу, если вы размещаете свои службы WCF в asp.net. В противном случае вы используете ChannelFactory для создания своих прокси-серверов.

1 голос
/ 14 октября 2010

Мне понравился подход, описанный в этой MSDN статье Ayende, хотя я сам не пробовал.

Стоит проверить.

0 голосов
/ 16 октября 2010

В качестве альтернативы RPC (удаленному вызову процедур), предоставляемому WCF, вы также можете рассмотреть чтобы ваш бэкэнд был реализован как сервис, общающийся через сообщения.
Вы можете разработать такую ​​услугу для связи в одном направлении и / или запрос-ответ.
Для реализации связи между приложениями через сообщения вы можете использовать Eneter Messaging Framework . Это легкий и ваши приложения могут общаться на основе NamedPipes, Tcp или Http.
Если вам интересно, вы можете получить больше технической информации здесь .
Или больше примеров вы можете найти на eneter.blogspot.com , а фреймворк можно загрузить с www.eneter.net .

0 голосов
/ 14 октября 2010

Лично я бы хотел использовать REST + JSON, используя ASP.NET MVC, но самая безопасная ставка - WCF.Здесь есть множество примеров:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=35ec8682-d5fd-4bc3-a51a-d8ad115a8792&displaylang=en

С точки зрения определения интерфейса, разбейте вызовы на гранулярные функции.

...