c# - WCF 数据服务与 WCF 服务库

标签 c# wcf web-services

我注意到我无法将 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/

相关文章:

c# - 使用 asp.net 将 aspx 动态页面 url 转换为用户友好的 url 的最佳方法

c# - Silverlight 启用的 WCF 服务与 Web 服务与 ADO.NET 数据服务

c# - 无法将 System.Xml.XmlNode[] 转换为 System.Byte[]

java - 从命令行或脚本部署 WebService

java - 如何在 GlassFish 上构建从 JAX-WS 到 Swing 客户端的推送通知?

c# - 在Asp.net MVC Controller 上执行异步OnAction

c# - 从外部 MVC 应用程序中的 CrmOrganizationServiceContext 获取 OrganizationServiceProxy

c# - C# 中的网络 session

c# - 验证后读取 WCF 服务中的用户名

c# - WCF 服务停止工作 10054 WSAECONNRESET 连接被对等方重置