war*_*old 11 hosting service wcf odata
我有一个项目需要实现WCF数据服务(OData)来从控制系统(.NET Framework应用程序)检索数据.WCF数据服务需要由.NET应用程序(无ASP.NET和无IIS)托管.
我最近看过很多WCF数据服务示例; 它们都由ASP.NET应用程序托管.我还看到了自主(控制台应用程序)示例,但它适用于WCF服务(不是WCF数据服务).
可以使用独立的.NET应用程序来托管WCF数据服务(http://localhost:1234/mydataservice.svc/...).
如果是,有人可以提供一个例子吗?
mar*_*c_s 28
我只是尝试了同样的事情 - 是的,您可以在自己的程序集中托管WCF数据服务 - 只需要一些小技巧.
这是如何做:
将您的数据模型(EF Data Model)放入自己的程序集中,让我们调用它 DataModel
创建一个新的类库项目(调用它MyDataServiceHost)
添加一些参考:
DataModel的数据层组装System.ServiceModelSystem.ServiceModel.WebSystem.Data.Services.ClientSystem.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将类命名为任何你喜欢的,它具有从派生DataService<T>哪里T是你的数据模型的名称; 如果您正在使用实体框架,那么它就是您的对象上下文类的名称 - 通常是(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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它实例化一个DataServiceHost,它派生自WebServiceHost(后者又派生自ServiceHost),它将为您启动WCF数据服务运行时.
现在,您可以使用以下命令从任何应用启动WCF数据服务:
MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
Run Code Online (Sandbox Code Playgroud)最后要记住的事情:用于启动WCF数据服务的应用程序必须在其app.config(或web.config)中具有连接字符串(EDM连接字符串,如果您使用的是Entity Framework)上班!
| 归档时间: |
|
| 查看次数: |
8478 次 |
| 最近记录: |