Ответ 1
Я просто попробовал то же самое - и да, вы можете разместить службу данных 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(); } } } }
Он создает экземпляр DataServiceHost, который получен из WebServiceHost (который, в свою очередь, является производным от ServiceHost), и он будет запускать среду выполнения службы WCF для вас.
-
теперь вы можете запустить свою службу данных WCF из любого приложения, используя:
MyDataServiceHost.LaunchDataService("http://localhost:4444/YourService");
-
Последнее, что нужно помнить: приложение, которое вы используете для запуска службы данных WCF , должно иметь строку подключения (строка подключения EDM, если вы используете Entity Framework) в своем app.config(или web.config), чтобы это работало!