[英]Add Reference to PluralizationServices in .NET Standard Class Library
[英]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.