Как создать службы SOAP в ASP.NET Core

автор vadim


Службы, входящие в состав распределенных приложений, должны взаимодействовать друг с другом для обмена данными или информацией. Для этих коммуникаций вам нужен общий формат данных, что сужает возможности, если ваши распределенные приложения охватывают гетерогенные платформы. Более ранние протоколы, такие как DCOM, RPC и IIOP, были ограничены однородными средами.

Для гетерогенных сред нам нужен протокол связи, который поддерживается на разных платформах. Здесь на помощь приходит SOAP (простой протокол доступа к объектам).

SOAP — это легкий протокол, использующий XML для облегчения обмена данными между системами. Благодаря SOAP объекты, разработанные на разных платформах и на разных языках программирования, могут беспрепятственно взаимодействовать. Таким образом, SOAP позволяет нам создавать сложные информационные системы путем интеграции сервисов различных систем в качестве компонентов.

В этой статье представлен SOAP и показано, как можно реализовать простую службу SOAP в приложении ASP.NET Core. Для этого мы воспользуемся SoapCore, пакетом промежуточного программного обеспечения SOAP для ASP.NET Core.

Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Чтобы создать проект веб-API ASP.NET Core 7 в Visual Studio 2022, выполните действия, описанные ниже.

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» оставьте флажок «Использовать контроллеры (снимите флажок, чтобы использовать минимальные API)». В этом проекте мы не будем использовать минимальные API.
  9. В другом месте окна «Дополнительная информация» оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию) и убедитесь, что флажки «Включить поддержку Open API», «Настроить HTTPS» и «Включить Docker» остаются снятыми. . Мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-API ASP.NET Core для работы со службами SOAP в разделах ниже.

Установите пакет SoapCore NuGet.

Затем добавьте пакет SoapCore NuGet в проект веб-API, который вы только что создали в Visual Studio. Для этого выберите проект в окне обозревателя решений, щелкните правой кнопкой мыши и выберите «Управление пакетами NuGet». В окне диспетчера пакетов NuGet найдите пакет SoapCore и установите его.

Кроме того, вы можете установить пакет SoapCore через консоль диспетчера пакетов NuGet, введя строку, показанную ниже.

PM> Install-Package SoapCore

Третий вариант — установить пакет SoapCore через интерфейс командной строки dotnet с помощью следующей команды.

dotnet add package SoapCore

Создайте контракт данных в ASP.NET Core.

Прежде всего, давайте определим контракт данных. В распределенном приложении контракт данных играет важную роль в обеспечении согласованности и совместимости данных, которыми обмениваются различные системы, путем определения структуры и формата обмениваемых данных. Помимо базовых типов, таких как строки, числа и логические значения, контракты данных также поддерживают составные типы, такие как классы и структуры, а также типы коллекций.

В контракте данных свойства или поля каждого типа данных указываются вместе с соответствующими типами данных, именами и ограничениями или правилами проверки. Это помогает обеспечить взаимодействие между клиентами и службами, реализованными на разных языках программирования или платформах.

В C# вы можете воспользоваться преимуществами [DataContract] атрибут для определения контракта данных. Создайте новый файл с именем Author.cs и введите следующий код, чтобы определить контракт данных.

using System.Runtime.Serialization;
namespace SoapCore_Demo
{
    [DataContract]
    public class Author
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public string Address { get; set; }
    }
}

Создайте контракт службы в ASP.NET Core.

Контракт службы является фундаментальной частью сервис-ориентированной архитектуры (SOA) и определяет интерфейс и поведение, предоставляемое службой. Контракты на обслуживание играют решающую роль в сервис-ориентированных архитектурах, обеспечивая четкую и эффективную связь между поставщиками услуг и клиентами. Эти контракты обеспечивают взаимное согласие между обеими сторонами, способствуя оперативной совместимости и эффективному взаимодействию.

Контракт службы обычно состоит из двух основных частей: интерфейса службы (описание службы) и любых связанных метаданных, описывающих службу, таких как форматы сообщений, требования безопасности и поведение службы. Контракты служб определяются с помощью атрибута ServiceContract в C#. [ServiceContract] Атрибут в C# используется для обозначения интерфейса или класса как контракта службы.

Создайте еще один файл .cs с именем AuthorServiceContract.cs и введите в него следующий код.

using System.Diagnostics;
using System.ServiceModel;
using System.Xml.Linq;
namespace SoapCore_Demo
{
    [ServiceContract]
    public interface IAuthorService
    {
        [OperationContract]
        void MySoapMethod(XElement xml);
    }
    public class AuthorService : IAuthorService
    {
        public void MySoapMethod(XElement xml)
        {
            Trace.WriteLine(xml.ToString());
        }
    }
}

Интерфейс IAuthorService помечен значком [ServiceContract] атрибут, который определяет контракт службы в приведенном выше примере. Метод MySoapMethod() помечен аннотацией [OperationContract] атрибут, который помечает его как операцию, которую клиенты могут вызывать для взаимодействия со службой.

Зарегистрируйте службу SOAP в ASP.NET Core.

Чтобы зарегистрировать службу SOAP, сначала необходимо добавить ее в контейнер, включив следующий фрагмент кода в файл Program.cs.

builder.Services.AddSingleton<IAuthorService, AuthorService>();

Затем вам следует настроить конвейер HTTP-запросов для конечной точки SOAP, используя следующую строку кода.

app.UseSoapEndpoint<IAuthorService>("/Service.asmx", new SoapEncoderOptions());

Вот полный исходный код файла Program.cs для справки.

using SoapCore;
using SoapCore_Demo;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddSingleton<IAuthorService, AuthorService>();
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseSoapEndpoint<IAuthorService>("/Service.asmx", new SoapEncoderOptions());
app.UseAuthorization();
app.MapControllers();
app.Run();

Запустить службу SOAP

Теперь запустите приложение и просмотрите следующую конечную точку, чтобы увидеть сгенерированный WSDL (язык описания веб-службы) службы SOAP, как показано на рисунке 1.

http://localhost:5210/Service.asmx
мыло wsdl aspnet core v2 ИДГ

Рисунок 1: WSDL нашей службы SOAP.

И вот она — служба SOAP в ASP.NET Core. Обратите внимание, что вы также можете создать службу SOAP с помощью инструмента ссылки на веб-службу WCF в интегрированной среде разработки Visual Studio. Этот инструмент доступен как расширение службы Visual Studio и может использоваться для создания службы Windows Communication Foundation (WCF) на основе SOAP в приложении .NET Core.

Дальше читайте это:

  • Облачные вычисления больше не являются пустяком
  • Что такое генеративный ИИ? Искусственный интеллект, который создает
  • Программирование с помощью ИИ: советы и лучшие практики от разработчиков
  • Python пытается удалить GIL и повысить параллелизм
  • 7 причин, по которым Java по-прежнему хороша
  • Война за лицензирование открытого исходного кода окончена

Related Posts

Оставить комментарий