【问题标题】:WCF 4.0 & Sync Framework 2.0 & Entity Framework 4.0 & ASP.NET MVC 2.0 & auto generated codeWCF 4.0 & Sync Framework 2.0 & Entity Framework 4.0 & ASP.NET MVC 2.0 & 自动生成代码
【发布时间】:2010-05-18 17:21:24
【问题描述】:

我必须在我们的 WPF 应用程序中使用 Sync Framework 2.0,该应用程序将包含 SQL Compact 3.5 并将与 SQL Server 2008 同步。

我关注了这个视频:http://download.microsoft.com/download/6/7/3/6730f0e7-a649-4656-96ab-150c7501a583/IntroToSyncServicesADODetNet_HighQuality.wmv

但我使用的是 EntityFramework 4.0 和 C#,而不是 DataSet。

我对通过添加带有扩展同步的本地数据库缓存文件自动生成代码非常感兴趣。太好了,我可以修改部分类中的代码来更改基本功能。

当我在 WPF 应用程序中有客户端和服务器位置的代码时,一切都正常工作。

当我使用包含服务器同步逻辑的 WCF 类库时,一切正常。

但是...在下面的示例中,他们向我们展示了如何在我的计算机上的本地“WCF 主机”中运行解决方案和托管 WCF。

第一个问题是:

“如何从包含所有服务器同步逻辑的 WCF 类库创建类的实例,然后托管它并在 ASP.NET MVC 2.0 应用程序中公开。”

最重要的是保留此 *.sync 文件,并且不要手动编写所有代码,它使我可以选择在数据库架构发生变化时自动更新此代码。

第二个问题是:

“当它在类库中的 app.config 上有它时,如何在我的 web.config 中为这个 WCF 类库实例配置端点和行为?...”

不幸的是,*.sync 文件的向导只能看到本地 WPF 应用程序或 WCF 类库,我不能直接选择 ASP.NET MVC 2.0(它会很棒)在 Web 应用程序中生成用于同步的类。

我很高兴看到工作示例。

问候, Daniel Skowroński

【问题讨论】:

    标签: asp.net-mvc wcf entity-framework synchronization


    【解决方案1】:

    使用托管在 ASP.NET MVC 2.0 中的同步逻辑创建 WCF 类库实例的解决方案:

    在这里你会看到类似的东西:

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

    其中 Service 是工厂方法,它将创建“namespace-assembly.class”的实例,因此,您必须将其更改为“wcf_lirrary_namespace-assembly.****DataCacheSyncService”并将 CodeBehind 更改为“wcf_lirrary_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 = new **DataCacheSyncAgent(new **DataCacheSyncContractClient());

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

    您可能会收到异常:“无法将类型 ** 转换为 Microsoft.Synchronization.Data.SyncGroupMetadata,我发现目前解决此问题的一种解决方案是扩展您的服务引用并 b CTR+H 重命名所有“asp-net-assembly-SyncGroupMetadata”和其他与“Microsoft.Synchronization.Data.SyncGroupMetadata”等类似的文件。

    • 现在应该开始同步

    HTH

    问候,

    丹尼尔·斯科伦斯基

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多