hosting - 创建 WCF 数据服务以在服务主机中使用

标签 hosting wcf wcf-data-services

我有一个服务应用程序,它通过不同的绑定(bind)托管多个 WCF 端点。我现在想在同一服务主机中托管 WCF 数据服务。 This post让我相信这是可能的。但是,关于如何创建 WCF 数据服务的每个示例都是从 ASP.NET Web 项目内部创建的,而不是从类库或服务应用程序中创建的。事实上,当从这些项目类型之一中选择时,WCF 数据服务甚至不会出现在“添加新项目”中。
我的问题是如何在类库中创建一个 WCF 数据服务,它将由服务主机调用,它已经托管了其他几个 WCF 端点? The link我已经引用过向我展示了如何在创建数据服务后托管它,但由于它没有显示为添加新项目的选项,所以我有点卡住了。

最佳答案

是的,您可以在自己的程序集中托管 WCF 数据服务 - 只需一些小技巧。

就是这样:

  • 把你的数据模型(EF Data Model)放到自己的程序集中,我们称之为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 数据服务运行时。
  • 现在您可以使用以下任何应用程序启动您的 WCF 数据服务:
    MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
    
  • 最后一件事要记住:用于启动 WCF 数据服务的应用程序 必须有 连接字符串(EDM 连接字符串,如果您使用的是 Entity Framework )在其 app.config(或 web.config)中,以使其正常工作!
  • 关于hosting - 创建 WCF 数据服务以在服务主机中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768145/

    相关文章:

    sql-server - 在共享主机上创建完整 SQL-Server 数据库备份的工具?

    c# - 从 WCF 数据服务客户端获取单个记录的最佳实践

    wpf - 在 WPF 智能客户端应用程序中使用 WCF DTO 时理解 MVVM 使用的问题

    .net - 如何对配置进行单元测试

    WCF + CQRS + 推送通知

    C# - 设计问题建议 : Can't Use Dictionary then what?

    c# - Windows Phone 8 CommunicationException 远程服务器返回错误 : NotFound

    java - 用于 Java 托管的 FreeBSD

    c# - Nancy:是否有 Server.MapPath ("~/") 等价物?

    html - 从 npm 脚本在浏览器中打开 html 文件