Re: DIME to a VB6 client using PEAR::SOAP
| From: | OP | Date: | Thu, 11 Sep 2003 17:47:51 +0000 |
| Subject: | Re: DIME to a VB6 client using PEAR::SOAP | ||
| References: | 1 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-1044@lists.php.net to get a copy of this message | ||
"Op" <o@peek.org.uk> wrote in message
news:20030911021533.1860.qmail@pb1.pair.com...
> Can you one help?? I am trying to get a Visual Basic 6 MSSOAP 3.0 client
to
> make a simple call and receive a DIME attachment from PEAR::SOAP 8.0 RC1.
> It's been days now and I still can't get the dam thing to work.I have
> written a client in php and that works fine. Has anyone managed to get
> anything like this to work?? I have basic data types between VB & PHP
> working fine. but I am stuck on this one.
>
> Any bits of code, pointers or just conformation that someone has made it
> work would be great
>
> PEAR::SOAP is great , but all the better if I can get this to work.
>
> Thanks in advance
>
> OP.
TO get a PEAR::SOAP 8.0 RC1 server to return a DIME attachment to visual
basic 6 using the MSSOAP 3.0
first off you need to copy the funtion function _decodeDIMEMessage from
Base.php to the HTTP.php
You need to edit the SOAP library file Value.php edit the function
SOAP_Attachment
$this->attributes['href'] = 'cid:'.$cid;
and replace with
$this->attributes['href'] = ''.$cid;
For some reason the MSSOAP implementation has a problem with "cid:" in the
returned href.
I assume that this will break any other implementation of soap from working
, but hey,
it's micros**t trying to do their own thing again.
Here is my code for the VB client: It uses lowlevel access, so no wsdl file
required (I think)
'---------------------------------------------------------------------------
Dim Serializer As SoapSerializer30
Dim Reader As SoapReader30
Dim ResultElm As IXMLDOMElement
Dim FaultElm As IXMLDOMElement
Dim Connector As SoapConnector30
Dim Composer As DimeComposer30
Dim Parser As DimeParser30
Set Connector = New HttpConnector30
Set Serializer = New SoapSerializer30
Set Composer = New DimeComposer30
Set Reader = New SoapReader30
Set Parser = New DimeParser30
Connector.Property("EndPointURL") =
"http://myserver.com:8080/soap/init_server.php?wsdl"
Connector.Property("SoapAction") =
"urn:init_Server#Example_server#echoMimeAttachment"
Connector.Connect
Connector.BeginMessage
Set Composer = CreateObject("MSSOAP.DimeComposer30")
Serializer.InitWithComposer Connector.InputStream, Composer
Serializer.StartEnvelope
Serializer.StartBody
Serializer.StartElement "echoMimeAttachment", "urn:init_Server"
Serializer.StartElement "inputStruct", CALC_NS
Serializer.WriteString "FromServer"
Serializer.EndElement
Serializer.EndElement
Serializer.EndBody
Serializer.EndEnvelope
Serializer.Finished
res = Reader.LoadWithParser(Connector.OutputStream, Parser)
Execute = Reader.RpcResult.Text
Set Node = Reader.RpcParameter("return")
Set Attachment = Reader.GetReferencedAttachment(Node)
FileName = "c:\FromServer.blob"
Attachment.SaveToFile FileName, "True"
'---------------------------------------------------------------------------
----
The php server was just a simple.
function echoMimeAttachment($stuff)
{
return new
SOAP_Attachment('return',"application/octet-stream","/path/to/file.blob");
}
I think that was it.
Good luck.
OP