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!
-- 
Posted via http://www.ruby-forum.com/.