Ahm*_*334 5 c# wcf wsdl asp.net-core
我想从ASP.NET Core 2.1中的wsdl url生成C#类.
WSDL网址是:https://airarabia.isaaviations.com/webservices/services/AAResWebServices?wsdl
我使用"Microsoft WCF Web服务引用提供程序"工具生成C#类并出现以下错误:
错误:未生成任何代码.如果您尝试生成客户端,这可能是因为元数据文档不包含任何有效的合同或服务,或者因为发现所有合同/服务都存在于/ reference程序集中.验证是否已将所有元数据文档传递给该工具.完成.
任何解决方案将不胜感激.
将您的 WSDL 文件下载到本地。然后,运行以下命令:
wsdl.exe /verbose /namespace:Air /out:D:\t\ar /protocol:SOAP /language:CS C:\path\to\wsdl\AAResWebServices_1.wsdl
Run Code Online (Sandbox Code Playgroud)
将命名空间更改为您选择的命名空间。
WSDL.exe 是 Windows SDK 的一部分:
C:\Program Files (x86)\Microsoft SDKs\Windows
Run Code Online (Sandbox Code Playgroud)
我的是在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
这生成了没有任何问题的类。我测试了这个解决方案。
简短的回答
打开开发命令提示符并运行以生成代理类:
svcutil http://airarabia.isaaviations.com/webservices/services/AAResWebServices?wsdl
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是http代替https.服务器的证书导致问题svcutil.将类复制到项目文件夹中.
System.ServiceModel.Primitives从NuGet 添加到项目的依赖项.由于ASP.NET Core不使用web.config文件,因此您可能必须在创建代理类时自己创建绑定,例如:
var binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
var address = new EndpointAddress("http://airarabia.isaaviations.com/webservices/services/AAResWebServices");
var client = new AAResWebServicesClient((Binding)binding, address);
Run Code Online (Sandbox Code Playgroud)
在绑定BasicHttpsBinding中使用,因为没有航空公司会接受未加密的连接.Sabre需要TLS 1.2或更高版本.
说明
航空公司和GDS并不擅长遵循网络互操作性标准.它们足够大,如果有任何变化,那就是旅行社必须容纳它们.一旦他们指定了他们的标准,他们也无需改变它.
例如,OTA标准和Sabre的实现是在2003年使用ebXML创建的,ebXML是一种未成为标准的SOAP的替代提议.然后,他们使用ebXML over SOAP,使用的机制并没有成为后来的SOAP标准的一部分.当创建WS-*标准来修复混乱并确保互操作性时,他们甚至都没有打扰.
您提供的WSDL类似于Sabre的.它使用OTA的一些操作,如OTA_PING,并添加自定义的操作.幸运的是,它不包括任何像匿名内部类型的工具破坏者.
您可以使用wsdl.exe使用2008之前的.NET堆栈创建ASMX代理.据我所知,这还没有被移植到.NET Core.也许它是Windows兼容包的一部分.毕竟,它是不合规的,并在10年前被弃用.ASMX也没有任何重大升级.我已经使用例如与艾玛迪斯ASXM服务时,在过去解串器碰到并发问题.
然后,有些人甚至不会尊重他们自己的XSD,例如Farelogix.它们可能会返回超出范围的枚举值,并说"好吧,XSD仅供参考".该wsdl文件明确标示not for production use
遗憾的是,没有通用的解决方案.以下是一些选项:
wsdl.exe如果你想使用.NET Core,ASMX是不可能的.如果必须使用它们,则必须切换到Full框架.警告
拨打电话并不意味着您可以与提供商进行通信.ebXML over SOAP的主要问题之一是正文是正常的,但标题(包括用于身份验证的标题)都是错误的.这意味着必须创建身份验证元素
另一个问题是认证字段经常被滥用,例如使用我们认为是会话令牌的认证头.GDS仍然使用大型机,这些会话令牌通常映射到实际的终端会话.
这意味着必须手动创建身份验证标头,而不是依赖WCF来生成它们.这也意味着交易是有状态的 - 必须跟踪哪个会话用于该预订以便预订,确保所有先前的交易在开始新交易之前完成等.
| 归档时间: |
|
| 查看次数: |
9694 次 |
| 最近记录: |