Демо III. Установка N-Tier с использованием Веб-сервисов   

   

Демо III. Установка N-Tier с использованием Веб-сервисов

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

В многослойной модели, серверный провайдер синхронизации запущен на сервере, в то время как агент синхронизации и клиентский провайдер находятся на клиенте. Так как агент находится на клиенте, клиентское приложение всем руководит. Это типичный случай, но нет технических причин не размещать агента на сервере и реализовывать своего рода серверно-инициируемую синхронизацию. Однако, это не то, для чего оптимизирована данная структура.

Для превращения двухъярусного приложения, разработанного в ‘демо-I’ в многоярусное потребуется два шага:

 Шаг 1: Расширение интерфейса ServerSyncProvider как Веб-сервиса

 Это очень просто. Интерфейс ServerSyncProvider имеет всего четыре метода. Это не так уж много. Для превращения их в Веб-методы нам потребуется простой упаковщик, как показано в нижеприведенном тексте:

public class Service : System.Web.Services.WebService
{
     private DbServerSyncProvider _serverProvider;

public Service ()
{
    /// Same code as in demo II Sychronize button code
}


///
  Access server sync parameters
[WebMethod]
public SyncServerInfo GetServerInfo()
{
    return _serverProvider.GetServerInfo();

/// Access table schema in DataSet form   
[WebMethod]
public SyncSchema GetSchema(Collection<string> tableNames)
{
    return _serverProvider.GetSchema(tableNames);

/// Enumerate group changes   
[WebMethod]
public SyncContext GetChanges(SyncGroupMetadata groupMetadata, SyncSession syncSession)
{
    return _serverProvider.GetChanges(groupMetadata, syncSession);       
}

/// Apply group changes
[WebMethod]
public SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession   syncSession)
{               
    return _serverProvider.ApplyChanges(groupMetadata, dataSet, syncSession);
}   

}

Наш элементарный упаковщик просто пересылает вызовы на экземпляр ServerSyncProvider. В файле service.cs содержится код конструктора для этого типа. Вам он должен показаться знакомым, так как это тот же код, что и код адаптеров синхронизации из предыдущей демонстрации. С этим сервер готов обслуживать клиента. Теперь давайте обратимся к клиентской стороне.

 Шаг 2: Расширение Web Service Proxy как интерфейса ServerSyncProvider

 На клиенте вы знаете что делать. Сошлитесь на Веб-сервис, который мы только что создали в клиентском проекте. Я назову ссылку SyncWebService:


 

 
Это форма строки, которую наследует веб-ссылка от SoapHttpClientProtocol. SyncAgent ожидает экземпляр ServerSyncProvider. Да, нам нужен еще один класс-упаковщик, чтобы переслать те же четыре метода на web service proxy. Если вам интересно как будет выглядеть код этого упаковщика, откройте файл ServerSyncProviderProxy.cs.

Теперь остались лишь мелочи. Просто передайте тип proxy агенту синхронизации и все.

Компиляция клиентского проекта вызовет несколько ошибок из-за несовместимости типов. Ниже следует инструкция, помогающая решить эту проблему.

Все просто, не так ли? Готовы для еще одной демонстрации?

 Шаги инсталляции приложения OfflineAppDemo:

  • Запустите SQL Server и загрузите файл demo.sql
  • Запустите скрипт до маркера "test sample"
  • Загрузите файл server_procs.sql и запустите его для создания процедур синхронизации на сервере
  • Установите SyncWebService (см. ниже)
  • Загрузите решение VS (OfflineAppDemo-Builder Project)
  • Скомпилируйте проект
  • Все готово

 Шаги инсталляции SyncWebService:

  • Скопируйте папку SyncWebService в c:interpubwwwroot
  • Из консоли управления IIS установите виртуальную папку SyncWebService как веб-приложение и установите Application Pool to ASP.NET 2.0
  • Дайте учетной записи network service доступ для чтения/записи к папке C:WINDOWSMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files
  • Добавьте ссылку на проект и назовите ее SyncWebServiceProxy
  • Вручную отредактируйте Reference.cs и добавьте пространство имен Microsoft.Synchronization.Data. Удалите код для типов, который уже определен в Microsoft.Synchronization.Data.dll как показано в файле reference.cs.
  • Добавьте новую учетную запись в SQL Server для Network Service и дайте ей доступ типа dbowner для публичной базы данных.