From: Massimo Bensi Date: 2009-10-14T22:23:44+09:00 Subject: NANWSI: Not Another .NET Web Service Issue 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): ------------------------------------------------------------------------------- testString ------------------------------------------------------------------------------- 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 soap:ServerServer was unable to process request. ---> Value cannot be null. Parameter name: String : 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/.