int successiveFailedCalls = 0;
public static void Main()
private static dynamic SysTransactionV1Query()
XmlDocument xmlDocument = new XmlDocument();
XmlDocument soapEnvelopeXmlResponse = new XmlDocument();
var body = generateSysTransactionV1QueryBody();
var request = createPostWebRequest(body);
using (WebResponse response = request.GetResponse())
successiveFailedCalls = 0;
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
soapEnvelopeXmlResponse.Load(rd);
string results = soapEnvelopeXmlResponse.SelectSingleNode("descendant::Results").InnerText;
using (TextReader sr = new StringReader(results))
xmlDocument = new XmlDocument();
res = xmlDocument["margintransactions"];
Console.WriteLine("res: " + res);
WebException we = e as WebException;
if (successiveFailedCalls < 15)
return SysTransactionV1Query();
private static HttpWebRequest createPostWebRequest(XmlDocument body)
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://api.astutepayroll.com/webservice/");
webRequest.ContentType = "text/xml;charset=\"ISO-8859-1\"";
webRequest.Method = "POST";
using (Stream stream = webRequest.GetRequestStream())
private static XmlDocument generateSysTransactionV1QueryBody(
string ApiKey = "agrilabour",
string ApiUsername = "pt20.api",
string ApiPassword = "fUK47G*oj$8A",
string Query = "transaction_date >= '2019-07-01 00:00:00'")
XmlDocument xml = new XmlDocument();
xmlns:x=""http://schemas.xmlsoap.org/soap/envelope/""
xmlns:urn96=""urn:SysTransactionV1Query""
xmlns:urn=""urn:tsoIntegrator"">
<urn96:SysTransactionV1Query>
<urn:api_key>{0}</urn:api_key>
<urn:api_username>{1}</urn:api_username>
<urn:api_password>{2}</urn:api_password>
<urn:query>{3}</urn:query>
</urn96:SysTransactionV1Query>
xml.LoadXml(string.Format(