我在Visual Studio中使用“添加服务引用”选项,以便使用第三方提供给我的WSDL文件创建代理类。 我有两个版本的WSDL - 我们称之为“OLD”和“NEW”。
即使WSDL文件假设是相同的(新的文件有更新的方法版本),在创建代理类时,我在OperationContractAttribute.Action中得到不同的值。
在OLD wsdl中,它看起来像是:
[System.ServiceModel.OperationContractAttribute(Action="http://webservices.amadeus.com/SATRQT_13_2_1A", ReplyAction="*")]
在新的wsdl中,它看起来像是:
[System.ServiceModel.OperationContractAttribute(Action="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityRequest", ReplyAction="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityResponse")]
我无法从“Action”值取自哪里弄明白。
在旧的WSDL中,该值是有效的,但在新的WSDL中是完全错误的,并且在尝试在WS中使用该服务时出现异常
当我查看OLD wsdl文件时,我可以看到具有相同值的“soapAction”;这似乎是从它取而代之的地方。但是在新的wsdl中,有一个与OLD wsdl
完全相同的值<wsdl:operation name="Air_MultiAvailability">
<soap:operation soapAction="http://webservices.amadeus.com/SATRQT_13_2_1A" />
有人能指引我到正确的地方吗?
在阅读了“Action”元素之后,我意识到我在NEW wsdl中看到的值是DEFAULT值(参见https://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.action(v=vs.110).aspx)
现在我需要了解为什么在OLD wsdl文件中我们得到Action值是正确的(我猜测正确操作下wsdl文件中定义的 soapAction )在新的wsdl中没有匹配,并且填充了默认值?
答案 0 :(得分:3)
确定发现了问题!
在WSDL文件中有多个具有相同名称的“Operation”<wsdl:portType name="WebServices">
<wsdl:operation name="DoSomething">
<wsdl:input message="ns:DoSomething_1_1" />
<wsdl:output message="ns:DoSomething_1_1" />
</wsdl:operation>
<wsdl:operation name="DoSomething">
<wsdl:input message="ns:DoSomething_2_2" />
<wsdl:output message="ns:DoSomething_2_2" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding type="ns:WebServices" name="WebServicesBinding">
<wsdl:operation name="DoSomething">
<soap:operation soapAction="http://webservices.my.com/DoSomething_1_1" />
</wsdl:operation>
<wsdl:operation name="DoSomething">
<soap:operation soapAction="http://webservices.my.com/DoSomething_2_2" />
</wsdl:operation>
</wsdl:binding>
“DoSomething”在此示例1.1和2.2中获得了2个版本 一旦我删除\重命名所有重复操作(我有多个),“Action”值取自“soapAction”元素
希望这将有助于将来的某个人!