У меня есть проект, который должен реализовать услуги передачи данных WCF (OData) для получения данных из системы управления (Приложение Платформы.NET). Услуга передачи данных WCF должна быть размещена приложением.NET (Никакой ASP.NET и НИКАКОЙ IIS).
Я недавно видел много примеров Услуги передачи данных WCF; они все размещаются приложением ASP.NET. Я также вижу самохост (консольное приложение) примеры, но это для Сервиса WCF (не Услуга передачи данных WCF).
Возможно иметь автономную.NET Приложения для хостинга Услуг передачи данных WCF (http://localhost:1234/mydataservice.svc/...).
Если да, кто-то может обеспечить пример?
Я просто попробовал то же самое - и да, вы можете разместить службу данных WCF в своей собственной сборке - с помощью нескольких небольших приемов.
Вот как:
поместите вашу модель данных (EF Data Model) в отдельную сборку, назовем ее DataModel
создадим новый проект библиотеки классов (назовем его MyDataServiceHost
)
добавьте несколько ссылок:
DataModel
сборка с уровнем данных System.ServiceModel
System.ServiceModel.Web
System.Data.Services.Client
System.Data.Services
- вы не можете выбрать это из обычного диалогового окна Добавить ссылку
в категории .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;
пространство имен MyDataServiceHost
{
открытый класс YourDataService: DataService
{
// Этот метод вызывается только один раз для инициализации политик на уровне службы.
public static void InitializeService (конфигурация DataServiceConfiguration)
{
// ЗАДАЧА: установить правила, чтобы указать, какие наборы сущностей и операции службы являются видимыми, обновляемыми и т. Д.// Примеры:
config.SetEntitySetAccessRule («*», EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
}
Вы можете назвать класс как угодно, и он должен быть производным от DataService
, где T
- имя вашей модели данных; если вы используете Entity Framework, это имя класса контекста вашего объекта - обычно что-то вроде (база данных) Entities
или все, что вы выбрали при создании EDM
, добавьте еще один класс в ваш новый проект, назовите его MyDataServiceHost.cs
, и он будет выглядеть примерно так:
using System;
using System.Data.Services;
using DataModel;
пространство имен MyDataServiceHost
{
открытый класс MyDataServiceHost
{
общедоступный статический void LaunchDataService (строка baseAddress)
{
Uri [] baseAddresses = новый Uri [1];
baseAddresses [0] = новый Uri (baseAddress);
используя (DataServiceHost host = new DataServiceHost (typeof (YourDataService), baseAddresses))
{
host.Open ();
Console.WriteLine ("Служба данных запущена и работает .....");
Console.ReadLine ();
host.Close ();
}
}
}
}
Он создает экземпляр DataServiceHost, который является производным от WebServiceHost (который, в свою очередь, является производным от ServiceHost), и запускает для вас среду выполнения WCF Data Service.
теперь вы можете запустить службу данных WCF из любого приложения, используя:
MyDataServiceHost.LaunchDataService ("http: // localhost: 4444 / YourService");
Последнее, что нужно помнить: приложение, которое вы используете для запуска службы данных WCF , должно иметь строку подключения (строка подключения EDM, если вы используете Entity Framework) в своем app.config ( или web.config), чтобы это работало!