SOAP Envelope Error

M

Mark A. Richman

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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</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

- Mark
 
D

David Sledge

Kent said:
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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</soap:Body>
</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>
 
M

Mark A. Richman

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

David said:
Kent said:
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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</soap:Body>
</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>
 
W

Werner Bohl

--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 7BIT
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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</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

- Mark
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

--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)
Content-type: text/x-vcard; charset=utf-8; name=wbohl.vcf
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=wbohl.vcf

begin:vcard
fn:Werner Bohl
n:Bohl;Werner
email;internet:[email protected]
tel;work:506-291-1374
tel;home:506-232-0398
tel;cell:506-876-2744
x-mozilla-html:TRUE
version:2.1
end:vcard


--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)--
 
M

Mark A. Richman

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 = "http://affinity.com/Wahp/Provisioning"
SOAP_ACTION = "http://affinity.com/Wahp/Provisioning/IsValidLogin"
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:Body><IsValidLoginResponse
xmlns="http://affinity.com/Wahp/Provisioning"><IsValidLoginResult>false</IsValid
LoginResult></IsValidLoginResponse></soap:Body></soap:Envelope>

Thanks,
Mark


Werner said:
Mark said:
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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</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

- Mark
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

--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)
Content-Type: text/x-vcard; charset=utf-8
Content-Transfer-Encoding: 7BIT
Content-Disposition: inline;
filename="wbohl.vcf"
X-Google-AttachSize: 184

begin:vcard
fn:Werner Bohl
n:Bohl;Werner
email;internet:[email protected]
tel;work:506-291-1374
tel;home:506-232-0398
tel;cell:506-876-2744
x-mozilla-html:TRUE
version:2.1
end:vcard


--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)--
 
M

Matt Rose

try object.inspect to see what methods and variables it contains.
The answer you're looking for is probably hidden within

Matt

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 = "http://affinity.com/Wahp/Provisioning"
SOAP_ACTION = "http://affinity.com/Wahp/Provisioning/IsValidLogin"
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:Body><IsValidLoginResponse
xmlns="http://affinity.com/Wahp/
Provisioning"><IsValidLoginResult>false</IsValid
LoginResult></IsValidLoginResponse></soap:Body></soap:Envelope>

Thanks,
Mark


Werner said:
Mark said:
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="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<n1:IsValidLogin xmlns:n1="http://affinity.com/Wahp/
Provisioning/">
<n1:username>Username</n1:username>
<n1:password>Password</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="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<IsValidLogin xmlns="http://affinity.com/Wahp/Provisioning">
<username>string</username>
<password>string</password>
</IsValidLogin>
</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

- Mark
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

--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)
Content-Type: text/x-vcard; charset=utf-8
Content-Transfer-Encoding: 7BIT
Content-Disposition: inline;
filename="wbohl.vcf"
X-Google-AttachSize: 184

begin:vcard
fn:Werner Bohl
n:Bohl;Werner
email;internet:[email protected]
tel;work:506-291-1374
tel;home:506-232-0398
tel;cell:506-876-2744
x-mozilla-html:TRUE
version:2.1
end:vcard


--Boundary_(ID_ixlm4ZaFFHbqrroJILetBA)--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,699
Latest member
AnneRosen

Latest Threads

Top