Как реализовать Самохост услуги передачи данных WCF (http://localhost:1234/myDataService.svc / …)

У меня есть проект, который должен реализовать услуги передачи данных WCF (OData) для получения данных из системы управления (Приложение Платформы.NET). Услуга передачи данных WCF должна быть размещена приложением.NET (Никакой ASP.NET и НИКАКОЙ IIS).

Я недавно видел много примеров Услуги передачи данных WCF; они все размещаются приложением ASP.NET. Я также вижу самохост (консольное приложение) примеры, но это для Сервиса WCF (не Услуга передачи данных WCF).

Возможно иметь автономную.NET Приложения для хостинга Услуг передачи данных WCF (http://localhost:1234/mydataservice.svc/...).

Если да, кто-то может обеспечить пример?

11
задан Cœur 15 April 2018 в 12:00
поделиться

1 ответ

Я просто попробовал то же самое - и да, вы можете разместить службу данных 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), чтобы это работало!

28
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: