ASP.NET Web API интерфейс (WSDL) - PullRequest
11 голосов
/ 29 февраля 2012

Я получил некоторую информацию о ASP Web API.Это похоже на хорошие вещи для веб-сервисов, но как создать что-то вроде WSDL для моего API, как это делает сервис WCF?Как сторонний компонент может использовать мой сервис?Или мне нужно описать каждый мой метод вручную?

Ответы [ 4 ]

15 голосов
/ 29 февраля 2012

Что касается того, выглядит ли это хорошо, вот мнение, так что попробуйте и посмотрите (лично мне это нравится)

Что касается WDSL, то веб-API является API-интерфейсом RESTful, не основанным на SOAP, поэтому WSDL отсутствуетПоддержка WCF имеет поддержку REST и SOAP, так что это может быть лучшим выбором, если вам требуется служба SOAP и WSDL, последний блог ScottGu по API довольно интересен и содержит ссылки на учебные пособия (вопрос о создании WSDL также дан в комментариях)

http://weblogs.asp.net/scottgu/archive/2012/02/23/asp-net-web-api-part-1.aspx

5 голосов
/ 19 ноября 2013

В WebApi нет поддержки SOAP или WSDL. Если вам нравится WebApi, вам понравится ServiceStack , который поддерживает как REST, так и SOAP. Вы можете генерировать WSDL со стеком сервисов даже для сервисов REST.

2 голосов
/ 27 января 2015

Это немного другой сценарий, чем то, о чем ОП, вероятно, намеревался спросить , но это более широкое толкование "как создать что-то вроде WSDL для моего API, как это делает служба WCF?"

У меня была ситуация, когда мы не смогли открыть службу WCF, и единственным вариантом был WebAPI. Однако сторона, использующая API, поддерживала только SOAP / WSDL и имела предопределенный WSDL, который требовался для размещения и соответствия интегратору.

Обслуживание файла WSDL

Одним действием WebAPI был файл WSDL, который был просто статическим файлом WSDL. Этот подход не поддерживает запросы частей WSDL. Таким образом, клиент должен использовать URL-запрос yourdomain.com/SomeRoot/SomeApiPath?wsdl, любые параметры строки запроса после этого будут игнорироваться и будет предоставлен полный WSDL. Параметр [FromUri] string wsdl гарантирует, что это действие выбрано для URL с ?wsdl, но не будет иметь никакого значения.

public IHttpActionResult SomeApiPath([FromUri] string wsdl)
    {
        System.IO.FileStream wsdlFileStream = System.IO.File.OpenRead(System.Web.HttpContext.Current.Server.MapPath("~/Content/SomeThing.wsdl"));
        var response = new HttpResponseMessage(HttpStatusCode.OK);
        response.Content = new StreamContent(wsdlFileStream);
        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml");
        return ResponseMessage(response);
    }

Это означает, что ваши методы API Action должны обрабатывать и отвечать на запросы XML SOAP.

Обработка SOAP-запроса

Хотя WebAPI может связывать параметры с запросами XML, я решил, что в моих действиях не было параметров, и вместо этого я использовал Request.Content.ReadAsStringAsync() в каждом действии, чтобы получить тело запроса (которое является запросом XML SOAP), а затем проанализировал его, используя XML чтобы LINQ, чтобы получить конкретные значения, которые мне нужны. Это избавило меня от попыток перепроектировать сериализуемый POCO XML для соответствия определенной структуре запроса WSDL.

Создание ответа SOAP

Вы можете использовать такие инструменты, как Svcutil.exe с Visual Studio, для генерации XML-сериализуемых POCO. Поскольку мы не используем WCF, вы не будете использовать полный контракт на обслуживание, а просто вытяните POCO-объекты класса C #, чтобы вы могли заполнить их данными и сериализовать их в XML для создания ответа. Однако создание конвертов SOAP со всеми правильными ссылками на пространство имен является чрезвычайно сложной задачей. В некоторых местах я взломал и фактически использовал сериализацию строк вместо XML-сериализации. Сериализуйте в строку XML и верните ее в ответе StringContent:

return ResponseMessage(
       new HttpResponseMessage(HttpStatusCode.OK)
       {
           Content = new StringContent(soapResponseBody, System.Text.Encoding.UTF8, "text/xml")
       });

Примечание. Даже исключения должны быть перехвачены и преобразованы в XML как сбой SOAP внутри конверта SOAP.

Все вышеперечисленные ужасные обходные пути являются доказательством того, что если вам абсолютно необходимо поддерживать SOAP, использование чего-либо, кроме WebAPI, будет намного проще. Мне нравится WebAPI, но когда вам приходится интегрироваться с другой системой, поддерживает только SOAP / WSDL, это, конечно, не инструмент для работы. Я предоставляю вышеизложенное в качестве краткого изложения подхода к решению этой проблемы, когда у вас нет другого выбора, но я рекомендую использовать среду, кроме WebAPI, которая поддерживает SOAP. Вы наверняка столкнетесь с проблемами, описанными выше. и должен иметь большой опыт работы с сериализацией XML и схемами XML, чтобы понять, как справиться с этими проблемами.

Также довольно странно / редко кто-то имеет предопределенный WSDL и просит других внедрить сервисы, которые предоставляют этот WSDL. Другими словами, они интегрируются со своей стороны как клиент, а вы являетесь хостом, но они диктуют структуру запросов. Обычно все наоборот, когда у кого-то есть сервис, который он предоставляет с предопределенным WSDL, и вы должны внедрить клиент для его использования, что, как правило, намного проще.

0 голосов
/ 29 сентября 2014

ServiceStack является хорошей альтернативой, которая включает в себя встроенную поддержку SOAP , которая автоматически генерирует WSDL, XSD и описания схем из ваших определений услуг, доступных из автоматически сгенерированных Страницы метаданных .

Добавить ссылку на ServiceStack

ServiceStack также предлагает лучшую альтернативу WCF Добавить ссылку на службу , которая может генерировать типизированныйAPI из всего URL-адреса с использованием Добавление ссылки на ServiceStack .

Преимущества перед WCF

  • Простой Использование небольшого шаблона T4 для сохранения сгенерированного POCOТипы.Обновление так же просто, как повторный запуск шаблона T4
  • Универсальный Чистый DTOs работает во всех JSON, XML, JSV, MsgPack и ProtoBuf универсальных клиентских сервисах
  • Многоразовые Сгенерированные DTO не связаны ни с какой конечной точкой или форматом.Значения по умолчанию являются частичными и виртуальными для максимального повторного использования
  • Устойчивость Услуги на основе обмена сообщениями предлагают ряд преимуществ по сравнению с RPC Services
  • Гибкая Генерация DTO настраивается, Сервер и Клиенты могут переопределять встроенные значения по умолчанию
  • Интегрированные Метаданные с расширенными сервисами, аннотированные на DTO, Внутренние службы исключаются, когдавнешний доступ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...