More - Post Command Problem looks like a RunRev problem?

Mark Smith lists at futilism.com
Tue Nov 18 08:50:01 EST 2008


Dave, the only things I might try would be
1) remove the double quotes from :-H 'SOAPAction: "http:// 
bandyaboutmusic.com/GenX/IAccountService/DbPing"' --might cause  
confused parsing of the command, so:
-H 'SOAPAction: http://bandyaboutmusic.com/GenX/IAccountService/DbPing'

2) are you sure that the url you're using <http:// 
britservices.genxdev.com/Account.svc?wsdl> should include the "?wsdl"  
- it looks like a request for the wsdl, might this confuse the server?

3) try again using "-v" instead of "-s", this puts curl in verbose  
mode and might show something useful...


Best,

Mark


On 18 Nov 2008, at 13:39, Dave wrote:

> Hi Mark,
>
> I've tried it using a file, and with the code below, the command  
> gets sent but shell doesn't return.
>
> The there is one function that wraps the "post" command, here it is  
> along with the :
>
> constant kUseRunRevPostCommand="false"
>
> function LibSoapPostCommand  
> theHTTPHeader,theSOAPEnvelope,theSoapURL, at theSoapReply, at theSoapRespons 
> e
>   local myShellCommand
>   local myCommandLineResponse
>   local myShellResult
>   local myFilePathName
>
>     get StackLogStringWithTime(cr & cr &  
> "---------------------------------------------------------------" &  
> cr & cr)
>     get StackLogStringWithTime("theSoapURL:" && theSoapURL)
>     get StackLogStringWithTime("theSOAPEnvelope:" && theSOAPEnvelope)
>
>  if kUseRunRevPostCommand = true then
>     try
>       set the httpheaders to theHTTPHeader
>       --libUrlSetSSLVerification false
>
>       --
>       --  Post the Data
>       --
>       post theSOAPEnvelope to url theSoapURL
>
>       --
>       -- Catch Time-Out Errors
>       --
>     catch myError
>       put the result into theSoapResponse
>       put it into theSoapReply
>       get StackLogStringWithTime("TIME-OUT - theSoapResponse:" &&  
> theSoapResponse)
>       get StackLogStringWithTime("theSoapReply:" && theSoapReply)
>       return empty
>     end try
>
>     --
>     --  Retreive Results
>     --
>     put the result into theSoapResponse
>     put it into theSoapReply
>     get StackLogStringWithTime("theSoapResponse:" && theSoapResponse)
>     get StackLogStringWithTime("theSoapReply:" && theSoapReply)
>
>   else
>     breakpoint
>     put UtilStackGetTempFolderPathName() & "CURLTemp.txt" into  
> myFilePathName
>     put theSOAPEnvelope into url("file:" & myFilePathName)
>
>     put "curl -s" into myShellCommand
>     repeat for each line myHeaderLine in theHTTPHeader
>       put " -H '" & myHeaderLine & "' " after myShellCommand
>     end repeat
>
>     put "-d @" & myFilePathName && theSoapURL after myShellCommand
>     put shell(myShellCommand) into myCommandLineResponse
>     put the result into myShellResult
>
>     put myCommandLineResponse into theSoapResponse
>     put myShellResult into theSoapReply
>
>     get StackLogStringWithTime("theSoapResponse:" && theSoapResponse)
>     get StackLogStringWithTime("theSoapReply:" && theSoapReply)
>
>     delete file myFilePathName
>   end if
>
>   return empty
> end LibSoapPostCommand
>
> ------------------------------------------------------
> This is the contents of the temp file:
> ------------------------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:ccn2="http://schemas.datacontract.org/2004/07/ 
> ServiceContracts.Data"
> xmlns:ccn3="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
> xmlns:i0="http://bam.com/"
> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
> <SOAP-ENV:Header>
>
> </SOAP-ENV:Header>
> <SOAP-ENV:Body>
> <DbPing xmlns="http://bam.com/">
> </DbPing>
> </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>
>
> ------------------------------------------------------
>
> This is the Shell Command:
>
> curl -s -H 'Accept: text/xml'  -H 'Accept: multipart/*'  -H  
> 'Content-length: 689'  -H 'Content-Type: text/xml; charset=utf-8'  - 
> H 'SOAPAction: "http://bandyaboutmusic.com/GenX/IAccountService/ 
> DbPing"' -d @/Documents/Programming/RunRevBase/Projects/GenX/ 
> RunTime/Temp/CURLTemp.txt http://britservices.genxdev.com/ 
> Account.svc?wsdl
>
> When I run this from RunRev the shell() function never returns, the  
> same happens if I run it from the command line.
>
> Thanks a lot
> Dave
>
> On 17 Nov 2008, at 16:32, Mark Smith wrote:
>
>> Sorry, I should have said, the library requires 2.9.
>>
>> How big is the data you're sending? I've had trouble putting large  
>> amounts of data on the command line (maybe a limitation of rev's  
>> 'shell' call, or something else). I was suggesting this mainly as  
>> a way fo see if it gave you any indication of what the problem  
>> might be, whether or not it would be useful in 'production'.
>> Anyway, you could certainly try passing the soap envelope on the  
>> command line (does writing it to a file really slow it down all  
>> that much?).
>> Anyway, you'll need to url encode the data, so something like
>>
>> put "curl -s" into tCurlStr
>>
>> repeat for each line L in myHttpHeaders -- if you're only setting  
>> one header, you don't need a repeat, of course.
>>   put " -H" && "'" & L & "'" after tCurlStr
>> end repeat
>>
>> put " -d" && "-" && quote & urlencode(mySoapEnvelope) & quote &&  
>> tUrl after tCurlStr
>> put shell(tCurlStr) into tResponse
>>
>> I think libUrl only ever puts errors into the result. What the  
>> shell call returns will be either the returned data, or an error  
>> (though the result may contain something if there was an error in  
>> the shell call itself).
>>
>> Also, I've just realised that if you do need to write to a  
>> tempfile, the line should be:
>> put " -d" && "@" & tFile && tUrl after tCurlStr
>>
>>
>> Best,
>>
>> Mark
>>
>> On 17 Nov 2008, at 16:10, Dave wrote:
>>
>>> Hi,
>>>
>>> Thanks for this. I looked at your library and found that it won't  
>>> run under RunRev 2.8.1.472 which is what I am using.
>>>
>>> Writing to a file will slow it down, do I *have* to use a file?  
>>> If not, how would I format the command?
>>>
>>> Also there are two return variables using the post command and I  
>>> need to return both:
>>>
>>> post mySoapEnvelope to url mySoapURL
>>> put it into myReply
>>> put the result into myResult
>>>
>>> How can I do this using the shell command?
>>>
>>> Would it be worth replacing the internet library from the latest  
>>> version of RunRev? Will this work? Are they compatible?
>>>
>>> All the Best
>>> Dave
>>>
>>> On 17 Nov 2008, at 15:21, Mark Smith wrote:
>>>
>>>> Dave, you'll need something like this:
>>>>
>>>> put the tempname into tFile
>>>> put mySoapEnvelope into url("file:" & tFile) -- this is so we  
>>>> don't pass a load of data on the command line
>>>> put "curl -s" into tCurlStr
>>>>
>>>> repeat for each line L in myHttpHeaders -- if you're only  
>>>> setting one header, you don't need a repeat, of course.
>>>>   put " -H" && "'" & L & "'" after tCurlStr
>>>> end repeat
>>>>
>>>> put " -d" && tFile && tUrl after tCurlStr
>>>> put shell(tCurlStr) into tResponse
>>>> delete file tFile -- cleanup
>>>>
>>>>
>>>> If you want to see the whole exchange including headers and  
>>>> everything, then replace "-s" with "-v" in the third line.
>>>>
>>>> Alternatively, you could try my library (http:// 
>>>> futsoft.futilism.com/revolutionstuff.html),
>>>> in which case it would be
>>>>
>>>> put curl.new() into tCurl
>>>> curl.setUrl tCurl, tUrl
>>>> curl.setHeaders  tCurl, myHttpHeaders
>>>> curl.setPostData tCurl, mySoapEnvelope
>>>> put curl.runTilDone(tCurl) into tResponse
>>>>
>>>>
>>>> Best,
>>>>
>>>> Mark
>>>>
>>>>
>>>> On 17 Nov 2008, at 14:40, Dave wrote:
>>>>
>>>>> Hi Mark,
>>>>>
>>>>> I can't figure out the correct format for the "curl" command,  
>>>>> or how to call it from RunRev.
>>>>>
>>>>> Given that the current post command looks like this:
>>>>>
>>>>> set the httpHeaders to myHTTPHeader
>>>>> post mySoapEnvelope to url mySoapURL
>>>>> put it into myReply
>>>>> put the result into myResult
>>>>>
>>>>> How would I do this using curl? The function to send the  
>>>>> command is called from all over the place so I would have to  
>>>>> change it in the low level function, if so then the above is  
>>>>> the only data I can get at and I have to return myReply and  
>>>>> myResult in the same format as the post command would use.
>>>>>
>>>>> Is this possible using curl?
>>>>>
>>>>> Thanks a lot
>>>>> All the Best
>>>>> Dave
>>>>>
>>>>> On 17 Nov 2008, at 12:00, Mark Smith wrote:
>>>>>
>>>>>> Dave, I wonder if it would be worth trying to do the post  
>>>>>> using curl (or some other tool) to see if the problem still  
>>>>>> occurs?
>>>>>>
>>>>>> Also, have you looked at what actual bytes the truncated  
>>>>>> response ends with ie. is the server sending back something  
>>>>>> weird?
>>>>>>
>>>>>> Best,
>>>>>>
>>>>>> Mark
>>>>>>
>>>>>> On 17 Nov 2008, at 11:29, Dave wrote:
>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> Please see below for the history of this problem. Since then  
>>>>>>> I have some more information:
>>>>>>>
>>>>>>> I installed WireShark and recreated the problem. When I look  
>>>>>>> at the captured information, it looks as if the response is  
>>>>>>> being sent and received by server/client ok. It shows a  
>>>>>>> number of TCP packets (TCP Segment of a reassembled PDU) and  
>>>>>>> then one block that shows as HTTP/XML. When I select this  
>>>>>>> block it shows the packet reassembled as 23782 bytes. However  
>>>>>>> when the error occurs, the response return by the RunRev post  
>>>>>>> command only shows the first 2736 bytes, e.g. the rest of the  
>>>>>>> reassembled block is truncated. I have the dumps as text  
>>>>>>> files but they are too big to post here.
>>>>>>>
>>>>>>> When I looked up the post command in RunRev it says it is  
>>>>>>> part of the internet library, however I can't find any source  
>>>>>>> code for this. Is it available? I'd like to add some trace  
>>>>>>> information so I can see if this library is being passed the  
>>>>>>> whole block and if so why is it going wrong on this block.
>>>>>>>
>>>>>>> Is there another way to do this in RunRev? e.g. A alternative  
>>>>>>> to the "post" command?
>>>>>>>
>>>>>>> Any ideas or suggestions on how to fix or even get a handle  
>>>>>>> of this problem would be greatly appreciated.
>>>>>>>
>>>>>>> All the Best
>>>>>>> Dave
>>>>>>>
>>>>>>> ------
>>>>>>>
>>>>>>> I read records from a database, format them, and add them to  
>>>>>>> a block of data. There is a blocking factor variable, it is  
>>>>>>> set to 200, so I read 200 records from the database, block  
>>>>>>> them into one big block and send it to the server via a  
>>>>>>> "post" command. The Server then sends a response which can be  
>>>>>>> variable in length, the response is in XML format. This  
>>>>>>> process works well 99% of the time, but sometimes, (and this  
>>>>>>> can be reproduced if the right data (or the wrong data in  
>>>>>>> this case!) is present in the database). When this happens  
>>>>>>> the response from the server is truncated in the middle of an  
>>>>>>> XML node. As far as I can tell the difference is that by  
>>>>>>> chance, a group of 200 records has caused the response to be  
>>>>>>> over a certain size.
>>>>>>>
>>>>>>> If I set the BlockingFactor to 50, the problem goes away, but  
>>>>>>> this causes a major slowdown.
>>>>>>>
>>>>>>> ------
>>>>>>>
>>>>>>> It is sending one block at a time, each block contains N  
>>>>>>> records. There are around 10,500 records in the database.
>>>>>>>
>>>>>>> Each record has an XML node in the reply, depending on the  
>>>>>>> content of the record sent, it will return different data of  
>>>>>>> variable size. It appears if the block returned is greater  
>>>>>>> than a certain size, it is truncated.
>>>>>>>
>>>>>>> Basically the process is:
>>>>>>>
>>>>>>> repeat for all Records in Database
>>>>>>> Read Record From Database
>>>>>>> Encode as XML
>>>>>>> Add to end of SendDataBlock
>>>>>>>
>>>>>>> if the number of records in SendDataBloack >  
>>>>>>> SendBlockingFactor then
>>>>>>>   post SendDataBlock
>>>>>>>   get response
>>>>>>>   process response
>>>>>>>   put empty into SendDataBlock
>>>>>>> end if
>>>>>>>
>>>>>>> end repeat
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> use-revolution mailing list
>>>>>>> use-revolution at lists.runrev.com
>>>>>>> Please visit this url to subscribe, unsubscribe and manage  
>>>>>>> your subscription preferences:
>>>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>>>>>
>>>>>> _______________________________________________
>>>>>> use-revolution mailing list
>>>>>> use-revolution at lists.runrev.com
>>>>>> Please visit this url to subscribe, unsubscribe and manage  
>>>>>> your subscription preferences:
>>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> use-revolution mailing list
>>>>> use-revolution at lists.runrev.com
>>>>> Please visit this url to subscribe, unsubscribe and manage your  
>>>>> subscription preferences:
>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>>>
>>>> _______________________________________________
>>>> use-revolution mailing list
>>>> use-revolution at lists.runrev.com
>>>> Please visit this url to subscribe, unsubscribe and manage your  
>>>> subscription preferences:
>>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>>
>>>
>>> _______________________________________________
>>> use-revolution mailing list
>>> use-revolution at lists.runrev.com
>>> Please visit this url to subscribe, unsubscribe and manage your  
>>> subscription preferences:
>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your  
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your  
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list