How can I use dynamic WSDL, it's operations and parameters, which is given in program config file?
For example, we have a config file:
[Section]
WSDL=http://example.com/SomePub/ws/SomeService?wsdl
Username=myuser
Password=mypass
OperationName=MyOperation
ParameterName=MyParameter
I.e. we have to use web-service, which is unknown, but given (by ini-file) only in run-time. So, we cannot use WSDL Import wizard in Delphi.
Can we write in Delphi such a program, which would load these settings from configuration, and then pass data to specified operation in specified parameter on web-service, which specified by given WSDL?
Using SOAPUI, import the service and perform a sample call. Copy the raw request and the raw response into notepad. Modify the real data with 'tags' and include each raw template as a value in your INI. When you need to make the call, open your INI, grab the raw response template and replace tags with real values. Manually send the SOAP request and parse the response in the same way using the raw template.
The Delphi WSDL importer and the Free Pascal Web Service Toolkit do not provide a way to build a SOAP request dynamically based on a WSDL.
The Web Service Toolkit (and the WSDL importer) are only source code generators, so the code first needs to be compiled - this requires to include a compiler with your application.
Related
How I can call webservice from voice xml (vxml) document. I am using an opensource IVR project and I need to run a webservice for any given option from within the vxml document.
This is similar to this query;
how can I call a webservice from voiceXML?
However, solution is provided there but it is not
You cannot call a web service directly from a VoiceXML application. There are generally two approaches for getting data into a VoiceXML application:
Use the data element tag to make an http request. The result must be XML. You will need to parse the result with the provided DOM functions. Note, some browsers have extended features to facilitate XML parsing. This also requires a VoiceXML 2.1 compliant browser.
Transfer control to a dynamic bit of server code that returns VXML to be processed populating your desired variables. This can be done with a goto element or subdialog element.
Your question is incomplete, but I suspect I know what's bothering you.
I get information from a webservice by using
<data name="return_data" srcexpr="some_url" method="post" namelist="var1 var2 var3" />
The data I get back is inside the return_data variable. In my case, the data are in XML format, and I use JavaScript functions to extract the data I need.
As an aside, for maintainability, re-usability, and ease of reading, I personally find it useful to create separate files for the JS functions and include them via <script> into my root VoiceXML document.
i need to know about how to fetch data (array) from web service to my delphi dataset (db grid or string grid like REST Application),
give me an example please...
best regards
I use web services in Delphi 7(soap 1.1) and Rad Studio XE6(soap 1.2). I recomend to use the WDSL Importer that comes with the IDE to make a .dcu file that represents the WebService(WS). Then you have to include the dcu file in the 'uses' of your .pas file.
Then, define the WS as a global static variable. You have to respect all the names in your dcu WS file.
So,
1- Use wdsl importer to create dcu file of the WS.
2- Include imported file in your 'uses' section.
3- Define the static var of the file.
4- Use the static var to call methods of the WS.
Hope it helps!
Bye
First of all: I'm on Ektron CMS v8.1
I'm having a problem with dynamicly adding translated content to the cms via the Webservice API. I can perfectly add xml content by using the following object and method:
ContentSoapClient csc = new ContentSoapClient("ContentSoap");
csc.AddContent3(...);
I specify a language and the xml content gets inserted. But now I want to add a translated version of the xml to the cms. So I want it to have the same contentId!
Anyone has an idea on this? The only method in the csc object that recieves a contentId is 'csc.AddContent2(..)' But that doesn't import anything and just gives me an error saying my xml is incorrect. While my xml is correct..I checked it!
Thanks!
Found the answer..
Ektron apparantly uses alot of asmx files and I only checked the "/workarea/webservices/WebServiceAPI/Content/Content.asmx" webservice. I found the method 'AddTranslatedXMLContent()' I need in the "/Workarea/webservices/ContentWS.asmx" webservice.
I wish they just cleaned up their API... Would save us a lot of trouble.
Firstly, I haven't used the ContentSoapClient class and can't find any documentation on it.
Ektron often takes a language id when you create the API object. See if the ContentSoapClient contructor can take a Language Id.
I am trying to find the best way (most efficient way) to return large files from Django back to an http client.
receive http get request
read large file from disk
return the content of that file
I don't want to read the file then post the response using HttpResponse as the file content is first stored in RAM if I am correct. How can I do that efficiently ?
Laurent
Look into mod_xsendfile on Apache (or equivalents for nginx, etc) if you like to use Django for authentication. Otherwise, there's no need to hit django, and just server straight from Apache.
There is a ticket that aims to deal with this problem here: http://code.djangoproject.com/ticket/2131
It adds an HttpResponseSendFile class that uses sendfile() to send the file, which transparently sends the file as it's read.
However, the standard HttpResponse is implemented as an iterator, so if you pass it a file-like object, it will follow its iteration semantics, so presumably you could create a file-like object wrapper that chunks the file in small enough pieces before sending them out.
I believe the semantics of iterating over a standard file object in python is that it reads line-by-line, which most likely won't solve your problem if you're dealing with binary files.
Of course, you could always put the static files in another location and serve that with a normal web server, unless you require intricate control (like access control requiring knowledge of the Django database)
My preference for all of this is to synthesize django with your http server so that when you want to serve static files, you simply refer them to a path that will never reach django. The strategy will look something like this:
Configure http server so that some requests go to django and some go to a static document root
link to static documents from any web pages that obviously need the static documents (e.g. css, javascript, etc.)
for any non-obvious return of a static document, use an HttpRedirect("/web-path/to/doc").
If you need to include the static document inside a dynamic document (maybe a page-viewer wrapping a large text or binary file), then return a wrapper page that populates a div with an ajax call to your static document.
I am using Cgicc , which has some methods to extract specific request headers, e.g. getUserAgent would return "User-Agent" header.
Is there a generic method that can return an arbitrary header value, e.g. something like
getHeaderValue("x-my-header");
Is there a way to do this using cgicc? and if cannot be done with cgicc, how else can I extract a custom header from the request in c++?
No, cgicc does not support this direcly. However, it is just a wrapper around CGI. http://en.wikipedia.org/wiki/Common_Gateway_Interface and it uses "getenv" in CgiInput
class to extract all information provided by the web server.
So if the client send some header that is not supported directly by CgiCC but does supported by the web server (lets say Accept-Encoding:) that you just need to read apropriate
environment variable getenv("HTTP_ACCEPT_ENCODING")
But it should be supported by web server you are working with
EDIT: actually according CGI RFC http://www.ietf.org/rfc/rfc3875.txt web server should provide enviroment variable for your example: HTTP_X_MY_HEADER