soap4r is generating this:
POST /Wahp.Provisioning/User.asmx HTTP/1.1
SOAPAction: “http://affinity.com/Wahp/Provisioning/IsValidLogin”
Content-Type: text/xml; charset=utf-8
Authorization: Basic U0hBUkVEXuaXN0cmF0b3I6JZSQ=
User-Agent: SOAP4R/1.5.5 (/114, ruby 1.8.5 (2006-08-25) [i386-mswin32])
Date: Wed Sep 20 13:44:12 -0400 2006
Content-Length: 437
Host: web001whp001:3250
<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd=“XML Schema”
xmlns:env=“http://schemas.xmlsoap.org/soap/envelope/”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
env:Body
<n1:IsValidLogin xmlns:n1=“StackPath”>
n1:usernameUsername</n1:username>
n1:passwordPassword</n1:password>
</n1:IsValidLogin>
</env:Body>
</env:Envelope>
My service expects this:
POST /Wahp.Provisioning/User.asmx HTTP/1.1
Host: web001whp001
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: “http://affinity.com/Wahp/Provisioning/IsValidLogin”
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:xsd=“XML Schema”
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/”>
soap:Body
string
string
</soap:Body>
</soap:Envelope>
What am I doing wrong?
class Test
def initialize()
@driver = Driver.new(URL,NS)
@driver.wiredump_dev = STDOUT
@driver.options[“protocol.http.basic_auth”] << [URL, USERNAME,
PASSWORD]
@driver.default_encodingstyle =
SOAP::EncodingStyle::ASPDotNetHandler::Namespace
@driver.add_method_with_soapaction(‘IsValidLogin’,SOAP_ACTION,‘username’,‘password’)
puts @driver.IsValidLogin(“Username”,“Password”)
end
end
On 9/20/06, Mark A. Richman [email protected] wrote:
Host: web001whp001:3250
</env:Body>
<?xml version="1.0" encoding="utf-8"?>
What am I doing wrong?
You are doing nothing wrong. Both xmls are the same according to SOAP
spec.
Kent S. wrote:
Content-Length: 437
</n1:IsValidLogin>
</soap:Envelope>
What am I doing wrong?
You are doing nothing wrong. Both xmls are the same according to SOAP
spec.
Are you sure the problem is with the envelope itself. I had a problem
talking to .net webservices but the problem was with namespace tags
being applied were they shouldn’t. Your examples above show similar
differences.
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</n1:password>
</n1:IsValidLogin>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
I tend to agree…I see the ns1 namespace, but also env vs. soap. Any
thoughts on how to make this work with .asmx?
Thanks,
Mark
On 9/20/06, David S. [email protected] wrote:
Content-Type: text/xml; charset=utf-8
env:Body
Host: web001whp001
string
spec.
</n1:IsValidLogin>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
But from XML point of view these are identical.
This attribute
xmlns=“StackPath”
defines a default namespace for the element and all its children that
are
without a namespace identifier.
Mark A. Richman wrote:
</env:Envelope>
<soap:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
What am I doing wrong?
@driver.add_method_with_soapaction(‘IsValidLogin’,SOAP_ACTION,‘username’,‘password’)
puts @driver.IsValidLogin(“Username”,“Password”)
end
end
I had the same exact problem with one of our data providers, and found
no way to make it work with
soap4r nor JOpera (a java based service orchestrator) nor some other
java wsdl tools tried.
So from strict xml point of view this wsdls are equivalent, but most
non-windoze wsdl parsers choke on it.
Luckily our provider was considering migrating to Java+Axis, and this
“feature” of .NET convinced them,
so this became a non-issue for me.
Werner Bohl
Kent S. wrote:
actual names do not matter, what matters is URI they point to. Please,
refer
to the spec: Namespaces in XML 1.0 (Third Edition)
I don’t know what kind of problem you are having with .Net.
What does the WSDL look like?
On 9/20/06, Mark A. Richman [email protected] wrote:
I tend to agree…I see the ns1 namespace, but also env vs. soap. Any
thoughts on how to make this work with .asmx?
Thanks,
Mark
‘env’ and ‘soap’ are just markers or identifiers of a namespace. Their
actual names do not matter, what matters is URI they point to. Please,
refer
to the spec: Namespaces in XML 1.0 (Third Edition)
I don’t know what kind of problem you are having with .Net.
I figured out that 90% of my problem was a trailing slash in my
namespace! I get a valid response from ASP.NET now.
However, my final question is how to convert my result into a boolean.
I get this object as a result now: #SOAP::Mapping::Object:0x3ddd1d4
Here’s my code:
require ‘soap/rpc/driver’
include SOAP::RPC
URL = “http://web001whp001:3250/Wahp.Provisioning/User.asmx”
NS = “StackPath”
SOAP_ACTION = “StackPath”
USERNAME = “SHARED\Administrator”
PASSWORD = “$secure$”
class AuthenticationClient
def initialize()
@driver = Driver.new(URL,NS,SOAP_ACTION)
@driver.wiredump_dev = STDOUT
@driver.options[“protocol.http.basic_auth”] << [URL, USERNAME,
PASSWORD]
@driver.add_document_method('IsValidLogin',SOAP_ACTION,
[XSD::QName.new(NS,'IsValidLogin')],
[XSD::QName.new(NS,'IsValidLoginResult')])
result =
@driver.IsValidLogin(:username=>“Username”,:password=>“Password”)
end
end
AuthenticationClient.new
And here is my SOAP response:
HTTP/1.1 200 OK
Date: Thu, 21 Sep 2006 14:41:58 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 383
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap=“http://schemas.
xmlsoap.org/soap/envelope/”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>soap:Bodyfalse</IsValid
LoginResult></soap:Body></soap:Envelope>
Thanks,
Mark
try object.inspect to see what methods and variables it contains.
The answer you’re looking for is probably hidden within
Matt
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
Sorry for late reply.
Mark A. Richman wrote:
I figured out that 90% of my problem was a trailing slash in my
namespace! I get a valid response from ASP.NET now.
However, my final question is how to convert my result into a boolean.
I get this object as a result now: #SOAP::Mapping::Object:0x3ddd1d4
Did you solve this problem? You need to define your custom mapping
registry for it. Or use ‘result.isValidLoginResult == “true”’ instead
of it.
Regards,
// NaHi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
iQEVAwUBRSBhvh9L2jg5EEGlAQK+/Qf/TENM5DDjUmVdZ/qah2Mo3VL/22dESHaK
cTq3rvNlw4J9WC0XgWeVr9K8YiCFSxTnbwjbyivhjjYDqrH9Gxpsy/Jqxo1TMGfa
2GhGcdMLLCZ8CACKroKkSJyHNOfcxgj4ouqHr83FzAk6Ud+NqT+hf01Fz5caF5Qh
kBmrtx73hN+EAqvI1Z/0wSqXw63ClEnK4USZPFX5Cr57Wv8xIOJ0rUHJV0MsDyDF
liZ4U037Q4wQ2Vkqslz3B7Ez4ufn6lgwTdj+JwFwfrCNeGAoyhJuFqMqU6kKTtuE
cEhXURwpCBXtH3slFBBcfJIPP/mLYfhO88Y0wnH6n6rB1PSsPFMrrQ==
=wshO
-----END PGP SIGNATURE-----