Создание клиент-серверной архитектуры с сохранением состояния в WCF - PullRequest
5 голосов
/ 06 мая 2011

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

Наше текущее программное обеспечение представляет собой пакет управления бизнесомнаписанный на Winforms (первоначально в .NET 2.0, но до сих пор переходивший на 4.0), который напрямую связывается с бэкэндом SQL Server.Существует также очень простой веб-сайт ASP.NET Webforms, который предоставляет некоторые основные функции для пользователей в дороге.Каждый наш клиент должен представить этот сайт (и несколько существующих веб-сервисов ASMX) миру, чтобы использовать его, и мы начинаем перерастать эту настройку.

По мере того, как мы переписываем этоМы решили, что было бы лучше, если бы мы сделали пакет более доступным извне, а также предоставили нашим клиентам возможность размещения их данных (мы не определились с поставщиком), вместо того, чтобы требоватьдля размещения на них SQL Server, служб отчетов SQL Server и IIS.

В настоящее время наш план заключается в том, чтобы переписать существующее приложение Winforms с использованием WPF, а также предоставить более богатый опыт работы с клиентами через Интернет.,Однако в дальнейшем наши клиенты проявили интерес к использованию планшетов, поэтому нам также потребуется поддержка собственных приложений iOS и Android в качестве клиентов.

Сочетание нашего желания предложитьхостинг сайтов (без использования архитектуры VPN) и поддержка клиентов на платформах, находящихся за пределами экосистемы .NET, привели нас к выводу, что вся наша клиент-серверная связь должна осуществляться через наш собственный сервис, а не с использованием SQLКлиентский сервер (поскольку мы не хотим показывать это миру, а драйверы SQL Server, насколько мне известно, для некоторых из этих платформ не существуют).

Прямо сейчас, наши варианты, как я их вижу, следующие::

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

Мой основной вопрос таков:

Какой вариант архитектуры будет наиболее подходящим, а также специфические функции, такие как ASP.NETпроверка подлинности или службы Durable Services для предоставления постоянной и постоянной службы клиентам WPF, ASP.NET, iOS и Android?

Ответы [ 2 ]

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

(я работаю в предположении, что под «состоянием» вы подразумеваете сеансовую).

Полагаю, один большой вопрос: хотите ли вы использовать SOAP в своем стеке сообщений?

Возможно, вам не нравится, поскольку часто нет мобильной поддержки SOAP на мобильных платформах (см .: Как вызвать веб-сервис с Android ). Без сомнения, это так же больно с iOS. Вызов SOAP из браузера («ASP.NET») не может быть увлекательным. Я даже не уверен, что это возможно!

К сожалению, если вы не используете SOAP, это быстро исключает большинство стандартных привязок WCF. Из того, что осталось, « Web HTTP », сеансы не поддерживаются, потому что, очевидно, HTTP является протоколом без сохранения состояния. Вы можете добавить поддержку сеанса вручную, используя решение , основанное на файлах cookie .

Вы можете использовать транспорт TCP (он поддерживает сеансы) и создать свой собственный стек каналов для поддержки кодировки не-SOAP (например, protocol-buffers ), но даже в этом случае вам нужно быть осторожным потому что транспорт TCP помещает в него специальные байты «кадрирования», что делает взаимодействие нетривиальным.

Какое состояние вы должны хранить в своих сессиях? Может быть, есть альтернативные подходы?

0 голосов
/ 07 мая 2011

1) Рассмотрите сервисы с сохранением состояния с использованием синглетонов, но сохраняйте шаблон запроса / ответа на уровне фасада без сохранения состояния. 2) рассмотрите возможность распределенного кэширования, возможно, Windows Server AppFabric Cache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...