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 = ‘Bing’
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
testString
</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
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:Bodysoap:Faultsoap:ServerServer
was unable to process request. —> Value cannot be null.
Parameter name: String</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!