title: Debugging SOAP Transmission
body: <p>I am attempting to do a proof-of-concept consumption of a web service using Delphi 2010 and Indy.  My code at this point is:</p>
  
  <pre><code>procedure TForm1.Log(const sEvent, sMsg: String);
  const sPrior: String = '';
  begin
    if sEvent &lt;&gt; sPrior then begin
      mTraffic.Lines.Append('');
      mTraffic.Lines.Append(Format('%s: %s', [sEvent, FormatDateTime('mm/dd/yyyy hh:nn:ss.zzz', Now)]));
      mTraffic.Lines.Append('--------------------------------------------------------------------------------');
      sPrior := sEvent;
    end;
    mTraffic.Lines.Append(sMsg);
    Application.ProcessMessages;
  end;
  
  function TForm1.BuildRequest: String;
  const MINPERDAY = 1440;
  var slRequest: TStringList;
      sFileName: String;
      sID: String;
      sGUID: String;
      oDoc: TNativeXML;
      oNode: TXmlNode;
      uNow: _SystemTime;
      dtNow: TDateTime;
      sNow: String;
      sNonce: String;
      oIdmd5: TIdHashMessageDigest5;
  begin
    sFileName := 'Send.xml';
    slRequest := TStringList.Create;
    oIdmd5 := TIdHashMessageDigest5.Create;
    oDoc := TNativeXML.Create;
    try
      oDoc.LoadFromFile(sFileName);
      SetAttrib(oDoc, 'inputMessage', 'utc', FormatDateTime('m/d/yyyy hh:mm:ss am/pm', Now));
      sGUID := 'urn:uuid' + MyCreateUUID;
      SetAttrib(oDoc, 'inputMessage', 'messageId', sGUID);
      SetNode(oDoc, 'wsa:messageId', sGUID);
      Windows.GetSystemTime(uNow);
      dtNow := SysUtils.SystemTimeToDateTime(uNow);
      sNow := FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow);
      sNonce := oIdmd5.HashStringAsHex(sNow + 'Jack' + 'Test' + 'Salt');
      SetNodes(oDoc, 'wsu:Created', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow));
      SetNode(oDoc, 'wsu:Expires', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow + 5 /MINPERDAY));
      SetNode(oDoc, 'wsse:Nonce', sNonce);
      SetNode(oDoc, 'ElectronicPostmark', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss.zz-8.00', dtNow));
      SetNode(oDoc, 'wsse:Username', '#MyUserName#');
      SetNode(oDoc, 'wsse:Password', '#MyPassword#');
      oDoc.XmlFormat := xfReadable;
      Result := oDoc.WriteToString;
    finally
      slRequest.Free;
      oIdmd5.Free;
      oDoc.Free;
    end;
  
  end;
  
  function TForm1.SSLPost(const url: String; sRequest: String): String;
  var lHTTP: TIdHTTP;
      lIOHandler: TIdSSLIOHandlerSocketOpenSSL;
      lIDLogDebug: TIdLogDebug;
      ss: TStringStream;
  begin
    lHTTP := TIdHTTP.Create(nil);
    lIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    lIDLogDebug := TIdLogDebug.Create(nil);
    ss := TStringStream.Create;
    try
      ss.WriteString(sRequest);
      ss.Position := 0;
      lIOHandler.SSLOptions.Method := sslvSSLv3;
      lIOHandler.OnStatusInfo := IdSSLIOHandlerSocketOpenSSL1StatusInfo;
      lHTTP.IOHandler := lIOHandler;
      lIdLogDebug.OnSend := IdLogDebug1Send;
      lIDLogDebug.OnReceive := IdLogDebug1Receive;
      lIDLogDebug.Active := True;
      lHTTP.Intercept := lIdLogDebug;
      try
        lHTTP.Request.CustomHeaders.Add('SOAPAction: "http://edd.ca.gov/SendTransmission"');
        Result := lHTTP.Post(url, ss);
      except
        On e: Exception do begin
          Result := e.Message + #13#10 + '**No Response**';
        end;
      end;
    finally
      lHTTP.Free;
      lIOHandler.Free;
      lIdLogDebug.Free;
      ss.Free;
    end;
  end;
  
  procedure TForm1.Button1Click(Sender: TObject);
  var sResponse: String;
  begin
    sResponse := SSLPost('https://FSETTESTPROD.EDD.CA.GOV', BuildRequest);
    Log('Response', sResponse);
  end;
  </code></pre>
  
  <p>Note: I am particularly uncertain about this line just before the POST</p>
  
  <pre><code>lHTTP.Request.CustomHeaders.Add('SOAPAction: "http://edd.ca.gov/SendTransmission"'); 
  </code></pre>
  
  <p>According to the web service documentation, I should be getting either an ACK1 success or an ACK1 error with an explanation.  Here is the result I am getting at this point:</p>
  
  <pre><code>    SSL: 02/28/2012 16:33:55.609
      --------------------------------------------------------------------------------
      SSL status: "before/connect initialization"
      SSL status: "before/connect initialization"
      SSL status: "SSLv3 write client hello A"
      SSL status: "SSLv3 read server hello A"
      SSL status: "SSLv3 read server certificate A"
      SSL status: "SSLv3 read server done A"
      SSL status: "SSLv3 write client key exchange A"
      SSL status: "SSLv3 write change cipher spec A"
      SSL status: "SSLv3 write finished A"
      SSL status: "SSLv3 flush data"
      SSL status: "SSLv3 read finished A"
      SSL status: "SSL negotiation finished successfully"
      SSL status: "SSL negotiation finished successfully"
      Cipher: name = RC4-MD5; description = RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
      ; bits = 128; version = TLSv1/SSLv3; 
  
      Send: 02/28/2012 16:33:55.859
      --------------------------------------------------------------------------------
      POST / HTTP/1.0
      Content-Length: 3130
      SOAPAction: "http://edd.ca.gov/SendTransmission"
      Host: FSETTESTPROD.EDD.CA.GOV
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Encoding: identity
      User-Agent: Mozilla/3.0 (compatible; Indy Library)
  
  
      &lt;?xml version="1.0" encoding="utf-8"?&gt;
      &lt;log&gt;
        &lt;inputMessage utc="2/28/2012 04:32:28 pm" messageId="urn:uuid{4A995507-9E23-49C3-A17C-19C30693C6C1}"&gt;
          &lt;processingStep description="Unprocessed message"&gt;
            &lt;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"&gt;
              &lt;soap:Header&gt;
                &lt;wsa:Action&gt;http://edd.ca.gov/Sendtransmission&lt;/wsa:Action&gt;
                &lt;wsa:MessageID&gt;urn:uuid{4A995507-9E23-49C3-A17C-19C30693C6C1}&lt;/wsa:MessageID&gt;
                &lt;wsa:ReplyTo&gt;
                  &lt;wsa:Address&gt;http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous&lt;/wsa:Address&gt;
                &lt;/wsa:ReplyTo&gt;
                &lt;wsa:To&gt;http://localhost:3031/EDD.DMRC.FSET.WebServices/FsetService.asmx&lt;/wsa:To&gt;
                &lt;wsse:Security soap:mustUnderstand="1"&gt;
                  &lt;wsu:Timestamp wsu:Id="Timestamp-db31b09e-9283-4ff1-9a57-5b97971328d4"&gt;
                    &lt;wsu:Created&gt;2012-02-29T00:32:28Z&lt;/wsu:Created&gt;
                    &lt;wsu:Expires&gt;2012-02-29T00:37:28Z&lt;/wsu:Expires&gt;
                  &lt;/wsu:Timestamp&gt;
                  &lt;wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-0ac2cf06-b8da-46c8-9314-8081144b09d5"&gt;
                    &lt;wsse:Username&gt;#MyUserName#&lt;/wsse:Username&gt;
                    &lt;wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;#MyPassword#&lt;/wsse:Password&gt;
                    &lt;wsse:Nonce&gt;0D78327F3F671183149EEC5907A6A5F6&lt;/wsse:Nonce&gt;
                    &lt;wsu:Created&gt;2012-02-29T00:32:28Z&lt;/wsu:Created&gt;
                  &lt;/wsse:UsernameToken&gt;
                &lt;/wsse:Security&gt;
              &lt;/soap:Header&gt;
              &lt;soap:Body&gt;
                &lt;SendTransmission xmlns="http://edd.ca.gov/"&gt;
                  &lt;SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd"&gt;
                    &lt;transmissionDataList&gt;
                      &lt;Count&gt;1&lt;/Count&gt;
                      &lt;transmissionData&gt;
                        &lt;transmissionId&gt;123456789&lt;/transmissionId&gt;
                        &lt;ElectronicPostmark&gt;2012-02-29T00:32:28.750-8.00&lt;/ElectronicPostmark&gt;
                      &lt;/transmissionData&gt;
                    &lt;/transmissionDataList&gt;
                  &lt;/SendTransmissionRequest&gt;
                  &lt;fileBytes&gt;UEsDBBQAAAAIAAaJUzYwks2W0QYAAD2IAAALAAAAREU2&lt;/fileBytes&gt;
                &lt;/SendTransmission&gt;
              &lt;/soap:Body&gt;
            &lt;/soap:Envelope&gt;
          &lt;/processingStep&gt;
        &lt;/inputMessage&gt;
      &lt;/log&gt;
  
  Receive: 02/28/2012 16:33:56.234
  --------------------------------------------------------------------------------
  HTTP/1.1 200 OK
  Connection: close
  Date: Wed, 29 Feb 2012 00:33:51 GMT
  Server: Microsoft-IIS/6.0
  X-Powered-By: ASP.NET
  Content-Length: 195
  Content-Type: text/html
  Set-Cookie: ASPSESSIONIDCQSQQDSS=BPLHDJLCKCLDKBDMLBNJOMHP; path=/
  Cache-control: private
  
  &lt;html&gt;
  &lt;head&gt;
  &lt;title&gt;This location has been marked as available&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;h1&gt;AVAILABLE&lt;/h1&gt;
  This IP address has been assigned to EDD FSET User Test web site.
  &lt;/body&gt;
  &lt;/html&gt;
  
  Response: 02/28/2012 16:33:56.281
  --------------------------------------------------------------------------------
  &lt;html&gt;
  &lt;head&gt;
  &lt;title&gt;This location has been marked as available&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;h1&gt;AVAILABLE&lt;/h1&gt;
  This IP address has been assigned to EDD FSET User Test web site.
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>I have been in phone and email contact with the agency that maintains the web service (the California EDD).  They are motivated to get as many people as possible to adopt this technology and reduce the amount of paper they have to handle but their they don't have in depth knowledge of the system because it was created by an outside vendor.  </p>
  
  <p>I have downloaded SOAPUI to try to understand the service better and eliminate any errors that might be caused by my implementation and possible misuse of the Indy library.  I'm not sure how to use SOAPUI for this purpose.  The instructions don't seem to address my situation.  If I load the WSDL into the program and attempt to test one of the functions, I get the result that the test finished with status [FINISHED] and I don't know what to make of that.</p>
  
  <p>I would appreciate any help on my little problem.</p>