[英]WCF 4.0 & Sync Framework 2.0 & Entity Framework 4.0 & ASP.NET MVC 2.0 & auto generated code
我必须在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文件,而不是手动编写所有代码,这使我可以选择在数据库架构更改时自动更新此代码。
第二个问题是:
“当在类库中的WCF类库实例位于app.config中时,如何在我的web.config中为该WCF类库实例配置端点和行为?...”
不幸的是,*。sync文件的向导只能看到本地WPF应用程序或WCF类库,我无法直接选择ASP.NET MVC 2.0(这很好)来生成用于在Web应用程序中进行同步的类。
我很高兴看到工作示例。
此致DanielSkowroński
使用ASP.NET MVC 2.0中托管的同步逻辑创建WCF类库实例的解决方案:
创建ASP.NET MVC 2.0应用并添加WCF服务
删除* .svc后面的C#文件* .cs
将来自ASP.NET projet的Project Referece添加到WCF类库
在ASP.NET中编辑* .svc文件
在这里,您将看到类似以下内容:
<%@ 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”等其他文件。
HTH
问候,
丹尼尔·斯科文斯基
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.