我有一个服务应用程序,它通过不同的绑定(bind)托管多个 WCF 端点。我现在想在同一服务主机中托管 WCF 数据服务。 This post让我相信这是可能的。但是,关于如何创建 WCF 数据服务的每个示例都是从 ASP.NET Web 项目内部创建的,而不是从类库或服务应用程序中创建的。事实上,当从这些项目类型之一中选择时,WCF 数据服务甚至不会出现在“添加新项目”中。
我的问题是如何在类库中创建一个 WCF 数据服务,它将由服务主机调用,它已经托管了其他几个 WCF 端点? The link我已经引用过向我展示了如何在创建数据服务后托管它,但由于它没有显示为添加新项目的选项,所以我有点卡住了。
最佳答案
是的,您可以在自己的程序集中托管 WCF 数据服务 - 只需一些小技巧。
就是这样:
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(又派生自 ServiceHost)的 DataServiceHost,它将为您启动 WCF 数据服务运行时。
MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
关于hosting - 创建 WCF 数据服务以在服务主机中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768145/