public static InvokeBatchExecutionService ( |
||
besobj | ||
return | Task |
public static async Task<BatchScoreStatus> InvokeBatchExecutionService(BES_Obj besobj)
{
// set a time out for polling status
//const int TimeOutInMilliseconds = 120 * 10000; // Set a timeout of 20 minutes
BatchScoreStatus status = new BatchScoreStatus();
string BaseUrl = besobj.GetAPIURL();
string strApiVersion = besobj.GetApiVersion();
if(!strApiVersion.Contains("api-version=2.0"))
{
status.StatusCode = 0;
status.Details = "Invalid API version. Please check your Post URL is from version 2.0 of the API help page.";
status.SetAdditionInformation();
return status;
}
BaseUrl = BaseUrl.Substring(0, BaseUrl.LastIndexOf("/jobs") + 5); // Correct BaseUrl don't have api-version
string apiKey = besobj.GetAPIKey();
using (HttpClient client = new HttpClient())
{
var request = new BatchExecutionRequest()
{
Input = besobj.GenerateInput(),
Outputs = besobj.GenerateOutputs(),
GlobalParameters = besobj.GenerateGlobalParameters()
};
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
//Submitting the job...
// submit the job
var response = await client.PostAsJsonAsync(BaseUrl + "?" + strApiVersion, request);
if (!response.IsSuccessStatusCode)
{
status.StatusCode = 0;
status.Details = response.ReasonPhrase + ". Job submission encountered error. Please check input.";
status.SetAdditionInformation();
return status;
}
string jobId = await response.Content.ReadAsAsync<string>();
Console.WriteLine(string.Format("Job ID: {0}", jobId));
response = await client.PostAsync(BaseUrl + "/" + jobId + "/start?" + strApiVersion, null);
string jobLocation = BaseUrl + "/" + jobId + "?" + strApiVersion;
status.JobLocation = jobLocation;
return status;
// start the job
//Starting the job...
//response = await client.PostAsync(BaseUrl + "/" + jobId + "/start?" + strApiVersion, null);
//if (!response.IsSuccessStatusCode)
//{
// status.StatusCode = 0;
// status.Details = response.ReasonPhrase + ". Cannot get status of Job Id " + jobId;
// status.SetAdditionInformation();
// return null;
//}
//string jobLocation = BaseUrl + "/" + jobId + "?" + strApiVersion;
//Stopwatch watch = Stopwatch.StartNew();
//bool done = false;
//while (!done)
//{
// //Checking the job status...
// response = await client.GetAsync(jobLocation);
// if (!response.IsSuccessStatusCode)
// {
// return null;
// }
// status = await response.Content.ReadAsAsync<BatchScoreStatus>();
// if (watch.ElapsedMilliseconds > TimeOutInMilliseconds)
// {
// done = true;
// await client.DeleteAsync(jobLocation);
// }
// switch (status.StatusCode)
// {
// case BatchScoreStatusCode.NotStarted:
// break;
// case BatchScoreStatusCode.Running:
// break;
// case BatchScoreStatusCode.Failed:
// done = true;
// break;
// case BatchScoreStatusCode.Cancelled:
// done = true;
// break;
// case BatchScoreStatusCode.Finished:
// done = true;
// break;
// }
// if (!done)
// {
// Thread.Sleep(1000); // Wait one second
// }
//}
//status.SetAdditionInformation();
//return status;
}
}
#endregion
public async Task <HttpResponseMessage> Post( [Metadata("API POST URL", "Web Service Request URI")] string _API_URL, [Metadata("API Key", "Web Service API Key")] string _API_Key, [Metadata("Storage Account Name (Input)", "Azure Storage Account Name")] string _Input_AccountName, [Metadata("Storage Account Key (Input)", "Azure Storage Account Key")] string _Input_AccountKey, [Metadata("Storage Container Name (Input)", "Azure Storage Container Name")] string _Input_Container, [Metadata("Blob Name (Input)", "Azure Storage Blob Name")] string _Input_Blob, [Metadata(FriendlyName = "Global Parameters Keys", Description = "Comma separated list of parameters", Visibility = VisibilityType.Advanced)] string _GlobalKeys = "", [Metadata(FriendlyName = "Global Parameters Values", Description = "Comma separated list of values", Visibility = VisibilityType.Advanced)] string _GlobalValues = "" ) { BES_Input Obj = new BES_Input { API_URL = _API_URL, API_Key = _API_Key, Input_AccountName = _Input_AccountName, Input_AccountKey = _Input_AccountKey, Input_Container = _Input_Container, Input_Blob = _Input_Blob, GlobalKeys = _GlobalKeys, GlobalValues = _GlobalValues }; BatchScoreStatus result = await BatchExecutionService.InvokeBatchExecutionService(Obj); HttpResponseMessage response = Request.CreateResponse <BatchScoreStatus>(HttpStatusCode.Accepted, result); response.Headers.Location = new Uri(string.Format("https://" + Request.RequestUri.Authority + "/api/CheckStatus?url={0}&api={1}", WebUtility.UrlEncode(result.JobLocation), WebUtility.UrlEncode(_API_Key))); response.Headers.Add("Retry-after", "30"); return(response); }