我注意到我无法将 WCF 数据服务(.svc 文件)添加到 Visual Studio 2010 中的 WCF 服务库项目。我对 WCF 有点陌生,想知道我应该如何/为什么要放置我的 WCF 数据服务到它自己的程序集中。
最佳答案
是的,您可以在自己的程序集中托管 WCF 数据服务 - 只需一些小技巧。这样做会使您的解决方案更简洁 - 它将各个部分分成更易于管理的部分,因此我绝对建议您这样做。
方法如下:
将您的数据模型(EF 数据模型)放入其自己的程序集中,我们称之为
DataModel
创建一个新的类库项目(命名为
MyDataServiceHost
)添加一些引用:
- 你的
DataModel
与数据层组装 -
System.ServiceModel
-
System.ServiceModel.Web
-
System.Data.Services.Client
-
System.Data.Services
- 你不能从通常的Add Reference
中选择它.NET 类别下的对话框 - 您需要浏览程序集文件。找到目录C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
(或C:\Program Files (x86)\...
在 64 位机器上)并选择System.Data.Services.dll
在里面
- 你的
向该类库中添加一个新类并调用它,例如
YourDataService.cs
- 它看起来像这样:using System.Data.Services; using System.Data.Services.Common; using DataModel; namespace MyDataServiceHost { public class YourDataService : DataService<YourModelEntities> { // This method is called only once to initialize service-wide policies. public static void InitializeService(DataServiceConfiguration config) { // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc. // Examples: config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } } }
你可以给这个类起任何你喜欢的名字,它必须派生自
DataService<T>
。其中T
是您的数据模型的名称;如果您使用的是 Entity Framework,则它是您的对象上下文类的名称 - 通常类似于(database)Entities
或者您在创建 EDM 时选择的任何内容在你的新项目中添加另一个类,命名为
MyDataServiceHost.cs
它看起来像这样:using System; using System.Data.Services; using DataModel; namespace MyDataServiceHost { public class MyDataServiceHost { public static void LaunchDataService(string baseAddress) { Uri[] baseAddresses = new Uri[1]; baseAddresses[0] = new Uri(baseAddress); using(DataServiceHost host = new DataServiceHost(typeof(YourDataService), baseAddresses)) { host.Open(); Console.WriteLine("DataService up and running....."); Console.ReadLine(); host.Close(); } } } }
它实例化一个派生自 WebServiceHost 的 DataServiceHost(后者又派生自 ServiceHost),它会为您启动 WCF 数据服务运行时。
现在您可以从任何应用使用以下方式启动 WCF 数据服务:
MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
要记住的最后一件事:您用来启动 WCF 数据服务的应用程序必须其连接字符串(EDM 连接字符串,如果您使用的是 Entity Framework )
app.config
(或web.config
)以使其正常工作!
关于c# - WCF 数据服务与 WCF 服务库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114748/