Как добавить веб-ссылку WSDL в. NET Стандартная библиотека - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно использовать этот WSDL: https://testapi2.schenker.pl/services/TransportOrders?wsdl

Но у меня проблема с добавлением ссылки на. NET Стандартная библиотека.

Для. NET Библиотека Framework, которую я использовал параметры для добавления веб-ссылки, как на экранах ниже.

Но для. NET Стандартный или. NET Framework У меня есть совершенно другие варианты для этого.

Также я получаю предупреждения:

Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://api.schenker.pl/TransportOrders/']/wsdl:binding[@name='TransportOrdersBinding']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://api.schenker.pl/TransportOrders/']/wsdl:service[@name='TransportOrdersService']/wsdl:port[@name='TransportOrdersPort']
Cannot import wsdl:binding
Detail: The given key was not present in the dictionary.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://api.schenker.pl/TransportOrders/']/wsdl:binding[@name='TransportOrdersBinding']

Есть ли возможность добавить этот WSDL в. NET Standard в качестве веб-ссылки? Или проблема в том сервисе Schenker, который совместим только со старым. NET Framework?

Почему это проблема, потому что мне нужно разместить целевое приложение на linux машине.

Файл WSDL: https://pastebin.com/p0nrLiwe

TransportOrderds.xsd https://pastebin.com/w6Edzdjz

StandardTypes.xsd https://pastebin.com/0pu6YJuA

1 Ответ

0 голосов
/ 19 мая 2020

Здесь вы можете попробовать два варианта, кроме подключаемых служб.

Варианты 1 - попробуйте использовать WSDL с метаданными, аналогичными метаданным модели службы, используя do tnet -svcutil. Это инструмент командной строки для создания ссылок на веб-службы для. NET Core и. NET Standard. Ссылка для do tnet -svcutil

Вариант 2. Использование фабрики каналов для использования службы WCF. Недостатком этого варианта является то, что вы должны знать определение контракта службы WCF, которую вы хотите использовать. Я создал небольшую службу WCF и опробовал ее, это был менее проблемный метод.

Я определил известный контракт WCF в проекте ASP. NET Core MVC, как показано ниже,

using System.ServiceModel;

namespace AspNet_Core_Wcf_Client.Contracts
{
    [ServiceContract]
    public interface IOrderService
    {
        [OperationContract]
        int GetOrdersCount();
    }
}

Этот контракт также определен в моем WCF.

Затем потребляется эта служба из контроллера, как показано ниже.

using AspNet_Core_Wcf_Client.Contracts;
using Microsoft.AspNetCore.Mvc;
using System.ServiceModel;

namespace AspNet_Core_Wcf_Client.Controllers
{
    public class OrderController : Controller
    {
        public IActionResult Index()
        {
            // create binding object
            BasicHttpBinding binding = new BasicHttpBinding();

            // create endpoint object
            EndpointAddress endpoint = new EndpointAddress("http://localhost:64307/OrderService.svc");

            // create channel object with contract
            ChannelFactory<IOrderService> channelFactory = new ChannelFactory<IOrderService>(binding, endpoint);

            // Create a channel
            IOrderService client = channelFactory.CreateChannel();
            int result = client.GetOrdersCount();

            ViewBag.Count = result;

            return View();
        }
    }
}

Для успешного использования метода фабрики каналов необходимо установить ServiceModel из пакетов-слепков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...