On Fri, Feb 02, 2007 at 10:46:17PM +0900, Max Russell wrote:
> I've now tried 2 different methods of sending a soap message (read in
> from a file) at a server, one using the net/http library the other a
> socket.

So what happens when you try these methods?

What does tcpdump (Linux) or ethereal (Windows) show at the network level?

    tcpdump -i eth0 -n -s1500 -vX tcp port 80

> require 'soap/wsdlDriver'
> require 'rexml/document'

Why require these libraries? AFAICT you're just trying to send a
pre-existing XML file over HTTP.

> #require 'net/http'
> require 'socket'
> include Socket::Constants
> 
> file = File.new("PDSUpdate.xml")
> doc = REXML::Document.new(file)
> #puts doc
> #http.post("http://inpsesrh02.inpses.co.uk:7778", doc)

I'd suggest you don't parse the document using REXML. Just read it in as a
file, and then squirt it out over the HTTP connection. I'm not sure how
http.post will cope with being given an REXML::Document object.

Try "ri Net::HTTP" for some samples of how to do a HTTP POST.
(or "ri1.8 Net::HTTP" under Ubuntu).

Capture the result in a variable, e.g. res = http.post ...
and inspect it.

Perhaps you should be posting to a more specific URL, e.g.
    http.post("http://inpsesrh02.inpses.co.uk:7778/foo/myapp", doc)

> socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
> sockaddr = Socket.pack_sockaddr_in( 7779,
> 'inpsesrh02.inpses.co.uk/orabpel/default/' )
> socket.connect( sockaddr )
> socket.puts doc
> socket.close

Doing it this way you'd want a TCPSocket.
See http://www.rubycentral.com/book/lib_network.html
for some examples.

HTH,

Brian.