示例#1
0
        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);
        }