NANWSI: Not Another .NET Web Service Issue

M

Massimo Bensi

Hi all,

I'm still quite new to Ruby, I come from years of "evil" development (MS
and .NET).
I am using ruby1.9.1 and soap4r to communicate with a .NET web service.

I've seen several posts, several advices, several "solutions"; I tried
them all, and still it doesn't work...
I've been trying different approaches for a couple of days now, and I
feel I am getting stuck.

My dumb web service is here: http://78.136.25.213/Test/ws/Service.asmx
From here you can get its WSDL:
http://78.136.25.213/Test/ws/Service.asmx?wsdl

It's a basic ws that expects a single string parameter ("inputString")
as input and returns a single string as output. That simple (this is a
test of course).

This is the code of my client:
-------------------------------------------------------------------------------
require "soap/rpc/driver"
require "RechnerServiceModule"
include RechnerServiceModule

server = 'http://78.136.25.213/Test/ws/Service.asmx'
wiredump_dev=STDERR
service = SOAP::RPC::Driver.new(server,
RechnerServiceModule::InterfaceNS)
service.use_default_namespace = true
service.default_encodingstyle =
SOAP::EncodingStyle::ASPDotNetHandler::Namespace
service.wiredump_dev=wiredump_dev
RechnerServiceModule::add_method(service)
result = service.TestWS:)parameter => "testString")
print("Result: ", result)
-------------------------------------------------------------------------------

This is the RechnerServiceModule:

-------------------------------------------------------------------------------
###file:servicemodule.rb
module RechnerServiceModule
InterfaceNS = 'http://tempuri.org/TestWS'
Methods=[['TestWS', 'inputString']]

def RechnerServiceModule.add_method(drv)
Methods.each do |method, *param|
drv.add_method_with_soapaction(method, InterfaceNS, *param)
end
end
end
-------------------------------------------------------------------------------

Looking at the wiredump I see that this is the SOAP XML sent (which
apparently is identical to the one .NET expects - on the TestWS web
page: http://78.136.25.213/Test/ws/Service.asmx?op=TestWS):

-------------------------------------------------------------------------------
<?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>
<TestWS xmlns="http://tempuri.org/TestWS">
<inputString>testString</inputString> </TestWS>
</soap:Body></soap:Envelope>
-------------------------------------------------------------------------------

Unfortunately I keep on receiving an error, as you can see in the
response:

-------------------------------------------------------------------------------
HTTP/1.1 500 Internal Server Error
Date: Wed, 14 Oct 2009 13:07:26 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 433

<?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><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Server
was unable to process request. ---&gt; Value cannot be null.
Parameter name: String</faultstring><detail
/></soap:Fault></soap:Body></soap:Envelope>

: Server was unable to process request. ---> Value cannot be null.
(SOAP::FaultError)
Parameter name: String

Process finished with exit code 1

-------------------------------------------------------------------------------

I tried the approach of generating the WSDL proxy, and this is the error
I received:

-------------------------------------------------------------------------------
wsdl2ruby.rb --wsdl http://78.136.25.213/Test/ws/Service.asmx?wsdl
--type client --force
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}binding
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}operation
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}body
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}address
I, [2009-10-14T14:58:09.237427 #35258] INFO -- app: Creating class
definition.
I, [2009-10-14T14:58:09.237637 #35258] INFO -- app: Creates file
'default.rb'.
F, [2009-10-14T14:58:09.239160 #35258] FATAL -- app: Detected an
exception. Stopping ... undefined method `collect' for
"{http://tempuri.org/}TestWS\n inputString - SOAP::SOAPString":String
(NoMethodError)
/usr/lib/Ruby1.9/rubygems-1.3.5/gems/soap4r-1.5.8/lib/xsd/codegen/gensupport.rb:239:in
`trim_eol'
....
etc
-------------------------------------------------------------------------------

So, if anybody has the solution to this, I would really love to hear
that, since this is killing me now...

Thanks for the help!
 
M

Massimo Bensi

I guess nobody has the answer to this, hence nobody was able to make
soap4r working with .NET web services?
Anybody could please suggest me a working SOAP library for Ruby that
works for real with .NET ws?
Sure appreciated, thanks!
 
D

Dirkjan Bussink

I guess nobody has the answer to this, hence nobody was able to make
soap4r working with .NET web services?
Anybody could please suggest me a working SOAP library for Ruby that
works for real with .NET ws?
Sure appreciated, thanks!

I've been successful in using various wsdl's for communicating with
some services which are also .NET based afaik. I've used wsdl2ruby.rb
in all cases and it didn't fail on the wsdl's I've given it.

But I'd probably use this now if I need to write additional clients:

http://github.com/unwire/handsoap/

I'd suggest giving it a try to see if it fits your needs.
 
B

brabuhr

I guess nobody has the answer to this, hence nobody was able to make
soap4r working with .NET web services?
Anybody could please suggest me a working SOAP library for Ruby that
works for real with .NET ws?
Sure appreciated, thanks!

Sorry, for the delay. I also haved used soap4r successfully in the
past to talk to .net web services. After your initial post, I grabbed
your wsdl and ran it through wsdl2ruby, the result was the same as
yours: the request appeared identical to the sample request provided
by the web service but the response was parameter String cannot be
NULL.

I would recommend trying another library such as suggested by Dirkjan
Bussink. Also, are you certain that the service itself is not the
issue (e.g. it appears that the error references a parameter named
String but the request only has a parameter testString)?
 
M

Massimo Bensi

unknown said:
Sorry, for the delay. I also haved used soap4r successfully in the
past to talk to .net web services. After your initial post, I grabbed
your wsdl and ran it through wsdl2ruby, the result was the same as
yours: the request appeared identical to the sample request provided
by the web service but the response was parameter String cannot be
NULL.

I would recommend trying another library such as suggested by Dirkjan
Bussink. Also, are you certain that the service itself is not the
issue (e.g. it appears that the error references a parameter named
String but the request only has a parameter testString)?

Thanks,

unknown: you were right, it was totally my fault!
I was too busy debugging this "new" (to me) Ruby library that I didn't
bother checking for issues in the web service.
Well, the problem was actually there..
Sorry about this, my bad.

Dirkjan: thank you much, I'll keep handsoap in mind in case I need
another soap library.

For now it works just fine with soap4r!
Thanks all!
 

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,764
Messages
2,569,564
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top