> 1) What's the difference between the marshalled snippet and what is
>    going across the wire, anyway?

One important difference is that the SOAP packets in the two examples are using
different "Soap Styles". Specifically, what you're seeing on the wire (and what
you want) is Document-style. The example that you dumped showed a SOAP packet
that is using Soap Encoding for the XML (i.e., or more specifically, it uses 
RPC/Encoded rather than the Doc/Literal style you are looking for).

What's on the wire has the xml document directly in the SOAP message without
using SOAP Encoding:

>   <env:Body>
>     <n1:AddObservation xmlns:n1=\"http://tempuri.org/\">
>       <n1:ObserverSenderGUID>service@house:vision</n1:ObserverSenderGUID>
>       <n1:ObservationEvents>
>       </n1:ObservationEvents>
>     </n1:AddObservation>
>   </env:Body>

See how the XML doc is embedded directly in the body?

What you 'dumped' is different -- notice how both the namespace and the encoding
style are different:

>   <env:Body>
>      <Observation xmlns:n1="http://www.ruby-lang.org/xmlns/ruby/type/1.6"
>          xsi:type="n1:Struct"
>          env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>        <type="xsd:string">Observation</type>

In this fragment the SOAP specifies "SOAP encoding":

   env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

You're dumping a soap envelope that was serialized using SOAP encoding -- but
the code you're sending SOAP out on the wire uses a different encoding (and
likely different code for serializing the XML).

You can see where you dump the xml that you specify RPC/Encoded style:

> client = SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver

See how you're specifying to create an RPC driver (using "create_rpc_driver")?

One of the first steps is to figure out how to dump a version of the soap
envelope that uses Document/Literal rather than the RPC/Encoded for your SOAP.
I'd begin by looking to see if there's something like:

client = SOAP::WSDLDriverFactory.new(wsdl_url).create_doc_driver

If not, look through the documentation to see how to specify Doc/Literal
encoding.

I'm not sure where to go from there, but I think understanding the SOAP encoding
style you need to send should be your first step. I'd also review the WSDL of
the service you're trying to invoke to see what it expects as well -- it would
probably require either one or the other of RPC/Encoded or Doc/Literal. You
need to make sure you using the correct style before trying to invokde the
service.


-kevin