Using .NET web service with soap4r

R

Roland Schmitt

Hello,

i try to call a ASP.NET based web service with soap4r.
The call is successful, this means no error is thrown in ruby nor in the web service. The problem is that the value returned is not as expected.

I cut i down to the following:

This is what soap4r sends:

<?xml version="1.0" encoding="us-ascii" ?>
<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>
<SayHello xmlns="http://localhost/PingService/" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name xsi:type="xsd:string">Roland</name>
</SayHello>
</env:Body>
</env:Envelope>

This is what the service returns:
...
<SayHelloResult>Hello, </SayHelloResult>
...

This is what i expect:
...
<SayHelloResult>Hello, Roland</SayHelloResult>

If i remove the namespace definition (ns1) by hand in the soap4r call, e.g.
<?xml version="1.0" encoding="us-ascii" ?>
<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>
<SayHello xmlns="http://localhost/PingService/" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name xsi:type="xsd:string">Roland</name>
</SayHello>
</env:Body>

i get the correct answer.

Here is my ruby code:
require "soap/rpc/driver"

include SOAP::RPC

class Test
def initialize()
driver = SOAP::RPC::Driver.new('http://localhost:8070/PingService/PingService.asmx','http://localhost/PingService/')
driver.allow_unqualified_element=true
driver.add_method_with_soapaction('SayHello','http://localhost/PingService/SayHello','name')
puts("Ergebnis: ", driver.SayHello("Roland"))
end
end
Test.new

Any hints?

Regards,
Roland




__________________________________________________________
Mit WEB.DE FreePhone mit hoechster Qualitaet ab 0 Ct./Min.
weltweit telefonieren! http://freephone.web.de/?mc=021201
 
D

David Ross

Roland said:
Hello,

i try to call a ASP.NET based web service with soap4r.
The call is successful, this means no error is thrown in ruby nor in the web service. The problem is that the value returned is not as expected.

I cut i down to the following:

This is what soap4r sends:

<?xml version="1.0" encoding="us-ascii" ?>
<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>
<SayHello xmlns="http://localhost/PingService/" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name xsi:type="xsd:string">Roland</name>
</SayHello>
</env:Body>
</env:Envelope>

This is what the service returns:
...
<SayHelloResult>Hello, </SayHelloResult>
...

This is what i expect:
...
<SayHelloResult>Hello, Roland</SayHelloResult>

If i remove the namespace definition (ns1) by hand in the soap4r call, e.g.
<?xml version="1.0" encoding="us-ascii" ?>
<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>
<SayHello xmlns="http://localhost/PingService/" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name xsi:type="xsd:string">Roland</name>
</SayHello>
</env:Body>

i get the correct answer.

Here is my ruby code:
require "soap/rpc/driver"

include SOAP::RPC

class Test
def initialize()
driver = SOAP::RPC::Driver.new('http://localhost:8070/PingService/PingService.asmx','http://localhost/PingService/')
driver.allow_unqualified_element=true
driver.add_method_with_soapaction('SayHello','http://localhost/PingService/SayHello','name')
puts("Ergebnis: ", driver.SayHello("Roland"))
end
end
Test.new

Any hints?

Regards,
Roland

I've never used soap4r with ASP.NET services, but I believe there might
be a missing encoding setting for ASPDotNet.

try..

require "soap/rpc/driver"

include SOAP::RPC

class Test
def initialize()
driver = SOAP::RPC::Driver.new('http://localhost:8070/PingService/PingService.asmx','http://localhost/PingService/')
driver.default_encodingstyle = SOAP::EncodingStyle::ASPDotNetHandler::Namespace
driver.allow_unqualified_element=true
driver.add_method_with_soapaction('SayHello','http://localhost/PingService/SayHello','name')
puts("Ergebnis: ", driver.SayHello("Roland"))
end
end
Test.new

David Ross
 
R

Roland Schmitt

Hi,

David said:
I've never used soap4r with ASP.NET services, but I believe there might
I would be lucky, if i could say the same...
be a missing encoding setting for ASPDotNet.

try..

require "soap/rpc/driver"

include SOAP::RPC

class Test
def initialize()
driver =
SOAP::RPC::Driver.new('http://localhost:8070/PingService/PingService.asmx','http://localhost/PingService/')

driver.default_encodingstyle =
SOAP::EncodingStyle::ASPDotNetHandler::Namespace

I have tried this, but the result was the same. Also the generated xml
was the same...
driver.allow_unqualified_element=true

driver.add_method_with_soapaction('SayHello','http://localhost/PingService/SayHello','name')

puts("Ergebnis: ", driver.SayHello("Roland"))
end end
Test.new

Thank you,
Roland
 
R

Roy Pardee

Be sure and throw a:

Web.Services.Protocols.SoapRpcMethod()

attribute on your web method. Else asp.net will not use rpc encoding.

HTH,

-Roy
 

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

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,191
Latest member
BuyKetoBeez

Latest Threads

Top