public ActionResult Create( string wsdl, string outputType = "java", string outputTarget = "android", string outputPackage = "wsclient.gen", string outputPrefix = "", string triggerEmail = null, string triggerUrl = null, bool demo = false ) { if (!User.Identity.IsAuthenticated) { demo = true; wsdl = FormValue <string>("wsdl", true, wsdl); outputType = FormValue <string>("outputType", true, outputType); outputTarget = FormValue <string>("outputTarget", true, outputTarget); outputPackage = FormValue <string>("outputPackage", true, outputPackage); outputPrefix = FormValue <string>("outputPrefix", true, outputPrefix); } else { Response.Headers.Add(Header, "Code Generation=1"); } if (!Regex.IsMatch(wsdl, "^(http|https)\\:\\/\\/", RegexOptions.Compiled | RegexOptions.IgnoreCase)) { return(JsonError("Invalid WSDL URL")); } if (!IsXml(wsdl)) { return(JsonError("Invalid WSDL URL - WSDL URL does not point to a valid XML")); } if (!Regex.IsMatch(outputType, "java", RegexOptions.IgnoreCase | RegexOptions.Compiled)) { outputPackage = ""; } WSJob job = new WSJob { WSDLUrl = wsdl, IsDemo = demo, StartTime = DateTime.UtcNow, JobStatus = "Queued", OutputType = outputType, OutputPackage = outputPackage, OutputPrefix = outputPrefix, OutputTarget = outputTarget, TriggerEmail = triggerEmail, TriggerUrl = triggerUrl }; if (User.Identity.IsAuthenticated) { job.OwnerID = User.Identity.Name; } using (DB.CreateSecurityScope(null)) { DB.AddEntity(job); DB.Save(); } // force update... CometController.Update(); return(JsonResult(job)); }
private static void FetchResult(ControllerContext context) { TimeSpan ts = TimeSpan.FromSeconds(10); var User = context.HttpContext.User; var Response = context.HttpContext.Response; string username = User.Identity.Name; long jobID; AtomJavaScriptSerializer js = new AtomJavaScriptSerializer(null); Response.Output.WriteLine("{ 'JobID': 0, 'Message': 'Welcome' }"); Response.Flush(); Update(); do { if (!Response.IsClientConnected) { break; } if (!Jobs.TryTake(out jobID, ts)) { Response.Output.WriteLine("{ 'JobID': 0, 'Message':'None' }"); Response.Flush(); Update(); continue; } using (WSClientModelEntities db = new WSClientModelEntities()) { using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(60))) { DateTime utcNow = DateTime.UtcNow; WSJob job = db.WSJobs.Where(Queued()).FirstOrDefault(x => x.JobID == jobID); if (job == null) { continue; } job.AssigneeID = username; job.JobStatus = "Assigned"; job.EndTime = DateTime.UtcNow; var s = js.Serialize(new { job.JobID, job.JobStatus, job.WSDLUrl, job.IsDemo, job.OutputType, job.OutputTarget, job.OutputPrefix, job.OutputPackage }); Response.Output.WriteLine(s); Response.Flush(); db.SaveChanges(); scope.Complete(); } } } while (true); }