Dave, You can also try scripting your post call by hand using socket routines from Rev itself. You basically assemble an HTTP request inside a string and use write to socket to send it around. This is pretty easy to do and gives you a lot of control over what is happening.
Cheers andre On Tue, Nov 18, 2008 at 11:50 AM, Mark Smith <[EMAIL PROTECTED]> wrote: > 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,@theSoapReply,@theSoapResponse >> 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 >>>>>>>> [email protected] >>>>>>>> Please visit this url to subscribe, unsubscribe and manage your >>>>>>>> subscription preferences: >>>>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution >>>>>>> >>>>>>> _______________________________________________ >>>>>>> use-revolution mailing list >>>>>>> [email protected] >>>>>>> Please visit this url to subscribe, unsubscribe and manage your >>>>>>> subscription preferences: >>>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> use-revolution mailing list >>>>>> [email protected] >>>>>> Please visit this url to subscribe, unsubscribe and manage your >>>>>> subscription preferences: >>>>>> http://lists.runrev.com/mailman/listinfo/use-revolution >>>>> >>>>> _______________________________________________ >>>>> use-revolution mailing list >>>>> [email protected] >>>>> Please visit this url to subscribe, unsubscribe and manage your >>>>> subscription preferences: >>>>> http://lists.runrev.com/mailman/listinfo/use-revolution >>>> >>>> >>>> _______________________________________________ >>>> use-revolution mailing list >>>> [email protected] >>>> Please visit this url to subscribe, unsubscribe and manage your >>>> subscription preferences: >>>> http://lists.runrev.com/mailman/listinfo/use-revolution >>> >>> _______________________________________________ >>> use-revolution mailing list >>> [email protected] >>> Please visit this url to subscribe, unsubscribe and manage your >>> subscription preferences: >>> http://lists.runrev.com/mailman/listinfo/use-revolution >> >> >> _______________________________________________ >> use-revolution mailing list >> [email protected] >> Please visit this url to subscribe, unsubscribe and manage your >> subscription preferences: >> http://lists.runrev.com/mailman/listinfo/use-revolution > > _______________________________________________ > use-revolution mailing list > [email protected] > Please visit this url to subscribe, unsubscribe and manage your subscription > preferences: > http://lists.runrev.com/mailman/listinfo/use-revolution > -- http://www.andregarzia.com All We Do Is Code. _______________________________________________ use-revolution mailing list [email protected] Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
