Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc wcf4.0&;同步框架2.0&;实体框架4.0&;ASP.NET MVC 2.0和;自动生成代码_Asp.net Mvc_Wcf_Entity Framework_Synchronization - Fatal编程技术网

Asp.net mvc wcf4.0&;同步框架2.0&;实体框架4.0&;ASP.NET MVC 2.0和;自动生成代码

Asp.net mvc wcf4.0&;同步框架2.0&;实体框架4.0&;ASP.NET MVC 2.0和;自动生成代码,asp.net-mvc,wcf,entity-framework,synchronization,Asp.net Mvc,Wcf,Entity Framework,Synchronization,我必须在我们的WPF应用程序中使用同步框架2.0,该应用程序将包含SQL Compact 3.5,并将与SQL Server 2008同步 我看了这个视频: 但我使用的是EntityFramework4.0和C 我对通过添加扩展名为sync的本地数据库缓存文件自动生成代码非常感兴趣。这很好,我可以修改部分类中的代码来更改基本功能 当我把客户端和服务器的代码放在WPF应用程序中时,一切都正常 当我使用包含服务器同步逻辑的WCF类库时,一切正常 但是。。。在下面的示例中,它们向我们展示了如何仅在我的

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

我看了这个视频:

但我使用的是EntityFramework4.0和C

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

当我把客户端和服务器的代码放在WPF应用程序中时,一切都正常

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

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

第一个问题是:

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

最重要的是要保留这个*.sync文件,不要手动编写所有代码。它让我可以在数据库架构发生更改时自动更新代码

第二个问题是:

“当WCF类库实例在类库中的app.config上时,如何在我的web.config中配置该实例的终结点和行为?”

不幸的是,*.sync文件向导只能看到本地WPF应用程序或WCF类库,我不能直接选择ASP.NET MVC 2.0(这将非常好)来生成用于web应用程序中同步的类

我将非常高兴看到工作的例子

问候,,
Daniel Skowroński

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

  • 按照以下步骤创建WCF类库

  • 创建ASP.NET MVC 2.0应用程序并添加WCF服务

  • 删除*.svc后面的C#文件*.cs

  • 将项目引用从ASP.NET projet添加到WCF类库

  • 在ASP.NET中编辑*.svc文件

在这里,您将看到如下内容:

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

其中,服务是将创建“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=new**DataCacheSyncAgent(new**DataCacheSyncContractClient())

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

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

  • 现在应该开始同步了

问候,

丹尼尔·斯科维斯基