.net 从Ruby调用时,调用方未通过服务身份验证?
我需要使用savonruby客户机使用soapweb服务。我认为端点是使用.NET框架编写的,事实上,我们目前有一个由服务团队提供的.NET客户端库 使用客户端库时,它工作正常,数据检索成功,但使用Savon客户端时,我得到:.net 从Ruby调用时,调用方未通过服务身份验证?,.net,ruby,wcf,web-services,soap,.net,Ruby,Wcf,Web Services,Soap,我需要使用savonruby客户机使用soapweb服务。我认为端点是使用.NET框架编写的,事实上,我们目前有一个由服务团队提供的.NET客户端库 使用客户端库时,它工作正常,数据检索成功,但使用Savon客户端时,我得到: (a:InvalidSecurity) The caller was not authenticated by the service. (Savon::SOAPFault) 问题是,我们已经检查了SOAP请求,两者似乎都是相同的。唯一的区别是一个是使用Ruby完成的,
(a:InvalidSecurity) The caller was not authenticated by the service. (Savon::SOAPFault)
问题是,我们已经检查了SOAP请求,两者似乎都是相同的。唯一的区别是一个是使用Ruby完成的,另一个是使用.NET完成的
以下是两个请求的几个示例:
.NET客户端
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Identity xmlns="http://vauto.com/webservices/Haystak/1.0/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AccessId>2A6B3F9FC49D1F4388AF7064045D964E</AccessId>
<AccessStamp>2014-01-31T16:46:07.1597194-05:00</AccessStamp>
<Signature>et0KyY1ZnjCM5z7BhQR9Q3Fj7V4=</Signature>
</Identity>
</s:Header>
<s:Body>
<GetVehicles xmlns="http://vauto.com/webservices/Haystak/1.0/">
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EntityId>TEST01</EntityId>
</request>
</GetVehicles>
</s:Body>
</s:Envelope>
2A6B3F9FC49D1F4388AF7064045D964E
2014-01-31T16:46:07.1597194-05:00
et0KyY1ZnjCM5z7BhQR9Q3Fj7V4=
测试01
Ruby客户端:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://vauto.com/webservices/Haystak/1.0/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<Identity xmlns="http://vauto.com/webservices/Haystak/1.0/"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AccessId>2A6B3F9FC49D1F4388AF7064045D964E</AccessId>
<AccessStamp>2014-02-03T10:24:50.3690365-05:00</AccessStamp>
<Signature>ykKc5tWCyY9UVb+zw50hfAxOnSA=</Signature>
</Identity>
</env:Header>
<env:Body>
<wsdl:GetVehicles>
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EntityId>TEST01</EntityId>
<EntityName i:nil="true" />
<HaystakId i:nil="true" />
<Vins i:nil="true"
xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</request>
</wsdl:GetVehicles>
</env:Body>
2A6B3F9FC49D1F4388AF7064045D964E
2014-02-03T10:24:50.3690365-05:00
ykKc5tWCyY9UVb+zw50hfAxOnSA=
测试01
web服务的WSDL如下所示:
非常感谢您的帮助。我有点迷路了,不知道还要尝试什么才能使用该web服务。有几件事:
- 您的两个SOAP请求在结构上非常不同,一个是
请求(Savon),另一个是
(.NET) - 标题中标记的顺序不同。理想情况下,这应该不会有什么不同,但如果服务器上的XMLAPI延迟,则可能会导致行为不端
- 您的.NET标识块已命名,但您的Savon标识块未命名
- 您的Savon请求有一个名称空间
这看起来无效xmlns:wsdl=”http://tempuri.org/“
第一步首先,确保在两个客户机中生成相同的请求,然后从那里开始。相同的请求应该得到相同的响应。+1。“肥皂用词不当,因为它并不简单”。。。嗯,当他们说这很简单的时候,我以为他们是在讽刺。“…如果服务器上的XML API被延迟,它会使事情变得不正常。”-真是难以置信。“相同的请求应该得到相同的响应。”,是的,确实如此。这就是我们在构建任何类型的服务时所期望的。@theTinMan在您看到用regex实现的SOAP服务器之前,您还没有活过。。。你是个可怜的混蛋,必须要和它打交道。我会尽力打破它,这样他们才能写正确。有没有办法改变savon的每辆车?我通过硬编码消息将所有内容配置为匹配,除了最后的wsdl,正如响应中所建议的那样,问题与使用wsdl:GetVehicles而不是普通GetVehicles有关