Almost all of my developments were in desktop applications. I am currently using Delphi 2010, and I need to write a SOAP client to access the web service that California EDD supports for electronic billing. I refused the importer of Delphi WSDL because there were too many behind the curtain and I did not seem to be able to make any progress. I downloaded Fiddler2 and used this to see what I wrote on the Internet. I found this procedure for publication, and I feel like I'm leaving now.
//from StackOverflow Andreas Rejbrand 06/04/2012 procedure WebPostData(const UserAgent: string; const Server: string; const Resource: string; const Data: AnsiString); overload; var hInet: HINTERNET; hHTTP: HINTERNET; hReq: HINTERNET; const accept: packed array[0..1] of LPWSTR = (PChar('*/*'), nil); header: string = 'Content-Type: text/plain'; begin hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hHTTP := InternetConnect(hInet, PChar(Server), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1); try hReq := HttpOpenRequest(hHTTP, PChar('POST'), PChar(Resource), nil, nil, @accept, 0, 1); try if not HttpSendRequest(hReq, PChar(header), length(header), PChar(Data), length(Data)) then raise Exception.Create('HttpOpenRequest failed. ' + SysErrorMessage(GetLastError)); finally InternetCloseHandle(hReq); end; finally InternetCloseHandle(hHTTP); end; finally InternetCloseHandle(hInet); end; end;
I changed the Content-Type because the original seemed never to return.
I call it this way:
procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; s: String; begin sl := TStringList.Create; sl.LoadFromFile('C:\Documents and Settings\Jack\Desktop\My Reading\FSET Development\Ping.xml'); s := sl.Text; sl.Free; WebPostData('BNWebSvc', 'FSETTESTPROD.EDD.CA.GOV','fsetservice', s); end;
In my browser there is a host (FSETTESTPROD.EDD.CA.GOV) and says that it is available. When I send a message, I get a 404 error, possibly because the web service name has been added. In Fiddler2, the output is as follows:
POST http://FSETTESTPROD.EDD.CA.GOV/fsetservice HTTP/1.1 Accept: */* Content-Type: text/plain User-Agent: BNWebSvc Host: FSETTESTPROD.EDD.CA.GOV Content-Length: 2190 Pragma: no-cache Cookie: __utma=158387685.1851397844.1321382260.1321382260.1321382260.1; __utmz=158387685.1321382260.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=calif%20edd%20eft%20payroll%20processor%20batch%20processing <?xml version="1.0" encoding="utf-8"?> <log> <inputMessage utc="3/2/2007 10:45:44 PM" messageId="urn:uuid:c07c9aef-28db-4843-8dfc-c5b4d3dc363b"> <processingStep description="Unprocessed message"> <soap:Envelope xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <soap:Header> <wsa:Action>//edd.ca.gov/Ping</wsa:Action> <wsa:MessageID>urn:uuid:c07c9aef-28db-4843-8dfc-c5b4d3dc363b</wsa:MessageID> <wsa:ReplyTo> <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> </wsa:ReplyTo> <wsa:To>http://localhost:3031/EDD.DMRC.FSET.WebServices/FsetService.asmx</wsa:To> <wsse:Security soap:mustUnderstand="1"> <wsu:Timestamp wsu:Id="Timestamp-0983e8c1-e822-4648-8066-33839f54a6a0"> <wsu:Created>2007-03-02T22:45:41Z</wsu:Created> <wsu:Expires>2007-03-02T22:50:41Z</wsu:Expires> </wsu:Timestamp> <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-0d55d82c-d16d-4c0e-826b-21bf7c805a0f"> <wsse:Username>MyUserName</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">MyPassword</wsse:Password> <wsse:Nonce>w6dgDz1DMzKntFsFdEcjhw==</wsse:Nonce> <wsu:Created>2007-03-02T22:45:41Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> </soap:Header> <soap:Body> <Ping xmlns="http://edd.ca.gov/"> </Ping> </soap:Body> </soap:Envelope> </processingStep> </inputMessage> </log>
I will need to send this using HTTPS when it works, and I probably need to enable this to make it work.
Am I going in the right direction?
The procedure from Andreas did not indicate how to get the answer. How to get an answer?