gpt4 book ai didi

asp.net - WCF 数据服务即库

转载 作者:行者123 更新时间:2023-12-04 06:09:45 25 4
gpt4 key购买 nike

今天我正在研究 WCF 数据服务,我有一个关于此的问题。我可以将 WCF 数据服务创建为库吗,只在我们现有的 Web 应用程序中创建 WCF 数据服务,并使用 Factory 属性引用该库,以便服务将与现有的 Web 应用程序一起部署。

据我所知,我们可以创建 WCF 服务库,只需要在 Web 应用程序中引用该库,例如:

  • 创建 WCF 库并实现服务契约
  • 创建一个 Web 应用程序并将新项目添加为 WCF 服务文件,然后引用 WCF 库

    <%@ ServiceHost Service="MyServiceLibrary.MyService"Factory="System.ServiceModel.Activation.WebServiceHostFactory"/>

  • 我想创建 OData 服务库而不是服务库。

    谢谢

    最佳答案

    是的,您可以在自己的程序集中托管 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();
    }
    }
    }
    }

    它实例化一个 DataServiceHost,它派生自 WebServiceHost(后者又派生自 ServiceHost),它将为您启动 WCF 数据服务运行时。
  • 现在,您可以使用以下任何应用程序启动 WCF 数据服务:
    MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
  • 最后要记住的事情:用于启动 WCF 数据服务的应用程序 必须有 连接字符串(EDM 连接字符串,如果您使用 Entity Framework )在它的 app.config(或 web.config)中以便它工作!
  • 关于asp.net - WCF 数据服务即库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7907120/

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