gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:05:16 24 4
gpt4 key购买 nike

我有一个服务应用程序,它通过不同的绑定(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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com