繁体   English   中英

如何添加WSDL web参考.NET标准库

[英]How add WSDL web reference to.NET Standard library

我需要使用这个 WSDL: https://testapi2.schenker.pl/services/TransportOrders?wsdl

但是我在添加对 .NET 标准库的引用时遇到问题。

对于 .NET 框架库,我可以选择添加 web 参考,如下面的屏幕所示。

但是对于 .NET 标准或 .NET 框架,我有完全不同的选择。

我也收到警告:

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 标准作为 Web 参考? 或者是只兼容旧的 .NET 框架的申克服务的问题?

为什么会出现问题,因为我需要托管目标应用程序 od linux 机器。

WSDL 文件: https://pastebin.com/p0nrLiwe

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

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

您可以在此处尝试两个选项,除了 Connected Services。

选项 1 - 尝试使用类似于服务 model 元数据的 WSDL 使用 dotnet-svcutil。 这是一个命令行工具,用于为 .NET Core 和 .NET 标准生成 web 服务参考。 dotnet-svcutil 的参考

选项 2 - 使用通道工厂消费 WCF 服务。 此选项的缺点是您应该了解要使用的 WCF 服务的合同定义。 我创建了一个小的 WCF 服务并尝试了它,它是一种少麻烦的方法。

我在ASP.NET Core MVC项目中定义了已知的WCF合约,如下图,

using System.ServiceModel;

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

该合同也在我的 WCF 中定义。

然后从 controller 使用此服务,如下所示。

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();
        }
    }
}

要成功使用通道工厂方法,需要从 nugget 包中安装 ServiceModel。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM