WCF 4.0 и Sync Framework 2.0, Entity Framework 4.0 и ASP.NET MVC 2.0 и автоматически сгенерированный код - PullRequest
2 голосов
/ 18 мая 2010

Мне нужно использовать Sync Framework 2.0 в нашем приложении WPF, которое будет содержать SQL Compact 3.5 и синхронизироваться с SQL Server 2008.

Я следил за этим видео: http://download.microsoft.com/download/6/7/3/6730f0e7-a649-4656-96ab-150c7501a583/IntroToSyncServicesADODetNet_HighQuality.wmv.

Но вместо DataSet я использовал EntityFramework 4.0 и C #.

Я очень заинтересован в автоматической генерации кода, добавив файл Local Database Cache с расширением sync. Это здорово, и я могу изменить код в своем частичном классе, чтобы изменить базовую функциональность.

Все работает, когда у меня есть код для клиентского и серверного места в приложении WPF.

Все работает, когда я использую библиотеку классов WCF, которая содержит логику синхронизации сервера.

Но ... В следующем примере они показывают нам, как запустить решение и разместить WCF в локальном «Хосте WCF» только на моем компьютере.

Первый вопрос:

«Как создать экземпляр класса из библиотеки классов WCF, который содержит всю логику синхронизации сервера, а затем разместить его и выставить в приложении ASP.NET MVC 2.0».

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

Второй вопрос:

"Как я могу настроить конечные точки и поведение для этого экземпляра библиотеки классов WCF в моем файле web.config, если он находится в файле app.config в библиотеке классов? ..."

К сожалению, мастер для файлов * .sync видит только локальное приложение WPF или библиотеку классов WCF, я не могу напрямую выбрать ASP.NET MVC 2.0 (было бы здорово) для создания класса для синхронизации в веб-приложении.

Мне было бы очень приятно увидеть рабочий пример.

С уважением, Даниэль Сковронски

1 Ответ

1 голос
/ 24 мая 2010

Решение для создания экземпляра библиотеки классов WCF с логикой синхронизации, размещенной в ASP.NET MVC 2.0:

здесь вы увидите что-то вроде:

 <%@ ServiceHost Language="C#" Debug="true" Service="namespace-assembly.class" CodeBehind="filename.svc.cs" %>

где Service - это метод Factory, который будет создавать экземпляр «namespace-assembly.class», поэтому вам нужно изменить это значение на «wcf_librrary_namespace-assembly. **** DataCacheSyncService» и CodeBehind на «wcf_librrary_namespace-assembly.filename.cs». «

  • затем измените экземпляр wcf в библиотеке классов WCF, который позволит разместить его с теми же учетными данными, что и в приложении asp.net, просто добавьте: [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] атрибут

  • далее настроить web.config:

    <service name="asp.net-namespace.wcf_service_name" behaviorConfiguration="service_nameBehavior">
      <host>
         <baseAddresses>
            <add baseAddress="http://ipaddres/asp.net-app-name/service-name.svc" />
         </baseAddresses>
      </host>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <endpoint address=""  binding="basicHttpBinding" contract="wcf_librrary_namespace assembly.I****DataCacheSyncContract" />
    </service>
    
    <behavior name="service_nameBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    

добавить также

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

ниже

<system.serviceModel>
  • теперь просто опубликуйте его на своем сервере и создайте приложение ASP.NET

  • теперь добавьте сервисную ссылку в ваше клиентское приложение

  • здесь у нас проблема в том, что когда ты будешь выполнять:

    ** DataCacheSyncAgent syncAgent = новый ** DataCacheSyncAgent (новый ** DataCacheSyncContractClient ());

Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize ();

Вы, вероятно, получите исключение: «Невозможно преобразовать тип ** в Microsoft.Synchronization.Data.SyncGroupMetadata. Одно из найденных решений, которое я нашел, - это расширить ссылку на службу и b CTR + H переименовать все «Asp-net-Assembly-SyncGroupMetadata» и другие файлы, аналогичные «Microsoft.Synchronization.Data.SyncGroupMetadata» и т. Д.

  • Теперь должна начаться синхронизация

НТН

С уважением,

Даниэль Сковронски

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