I'd also set

driver.generate_explicit_type = false

before the WS call.  I remember doing that, but I forget the actual reason why.



-----Original Message-----
From: Allan [mailto:allandu / gmail.com] 
Sent: Wednesday, May 24, 2006 6:33 PM
To: ruby-talk ML
Subject: Ruby Client to Microsoft .Net Webservice

---------- Forwarded message ----------
From: Allan <allandu / gmail.com>
Date: May 25, 2006 9:31 AM
Subject: Ruby Client to Microsoft .Net Webservice
To: ruby-talkl / ruby-lang.org

Hi all,
I am trying to write a client to communicate to Microsft .Net Webservice,
and the request contains a array of struct,
The request we want should like
<?xml version="1.0" encoding="utf-8" ?>
<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>
    <n1:refreshInformation xmlns:n1="http://www.msn.com/webservices/spaces/v1/
">
      <n1:Request>
        <n1:authCache>2</n1:authCache>
        <n1:Mark>2</n1:Mark>
        <n1:Re>
          <n1:auth>
            <n1:auth1>1</n1:auth1>
            <n1:auth2>1</n1:auth2>
          </n1:auth>
          <n1:auth>
            <n1:auth1>2</n1:auth1>
            <n1:auth2>2</n1:auth2>
          </n1:auth>
        </n1:Re>
      </n1:Request>
    </n1:refreshInformation>
  </env:Body>
</env:Envelope>


However the request we got is

<?xml version="1.0" encoding="utf-8" ?>
<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>
    <n1:refreshInformation xmlns:n1="
http://www.msn.com/webservices/spaces/v1/">
      <n1:Request>
        <n1:authCache>2</n1:authCache>
        <n1:Mark>2</n1:Mark>
        <n1:Re>
          <n1:item>
            <n1:auth1>1</n1:auth1>
            <n1:auth2>1</n1:auth2>
          </n1:item>
          <n1:item>
            <n1:auth1>2</n1:auth1>
            <n1:auth2>2</n1:auth2>
          </n1:item>
        </n1:Re>
      </n1:Request>
    </n1:refreshInformation>
  </env:Body>
</env:Envelope>


Notice that each element of the array is automaticlly given the title
'item', how can I change it to what I want or let it disapear.
my code is like
require 'soap/rpc/driver'
require 'soap/wsdlDriver'
require 'cgi'
require 'soap'
driver = SOAP::RPC::Driver.new("
http://services.spaces.msn.com/contactcard/contactcardservice.asmx ",
                               "http://www.msn.com/webservices/spaces/v1/",

"http://www.msn.com/webservices/spaces/v1/GetXmlFeed
")

driver.wiredump_dev = STDOUT
Re = Struct.new (:auth1, :auth2)
auth = Array.new
auth1 = auth.new(1,1)
auth2 = auth.new(2,2)
Request = Struct.new (:authCache, :Mark, :Re)
request = Request.new(2,2,Re.)
driver.add_method('refreshInformation','Request')
driver.default_encodingstyle =
SOAP::EncodingStyle::ASPDotNetHandler::Namespace
driver.refreshInformation (request)

-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.7.1/348 - Release Date: 5/25/2006
 

-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.7.1/348 - Release Date: 5/25/2006