コード例 #1
0
        protected override void ExecuteCmdlet()
        {
            var       uri   = GetEndpointUri();
            Stopwatch timer = new Stopwatch();
            Dictionary <MeasureResponseTimeMode, List <long> > measurements = new Dictionary <MeasureResponseTimeMode, List <long> >();

            foreach (var value in (MeasureResponseTimeMode[])Enum.GetValues(typeof(MeasureResponseTimeMode)))
            {
                if (value != MeasureResponseTimeMode.Undefined &&
                    value != MeasureResponseTimeMode.All &&
                    Mode.Has(value))
                {
                    measurements[value] = new List <long>();
                }
            }

            try
            {
                for (int i = -(int)WarmUp; i < Count; i++)
                {
                    bool isWarmUp = i < 0;
                    var  probe    = WebRequest.CreateHttp(uri);
                    probe.AllowAutoRedirect = false;

                    ClientRuntimeContext.SetupRequestCredential(ClientContext, probe);
                    WriteProgress(isWarmUp ? $"Warming up: {WarmUp + i + 1}/{WarmUp}": $"Sending: {uri}", i);

                    HttpWebResponse response = null;
                    try
                    {
                        try
                        {
                            timer.Restart();
                            response = probe.GetResponse() as HttpWebResponse;
                            timer.Stop();
                        }
                        catch (WebException e)
                        {
                            timer.Stop();
                            response = e.Response as HttpWebResponse;
                            if (response == null)
                            {
                                throw;
                            }
                        }
                        if (!isWarmUp)
                        {
                            long rountTrip         = timer.ElapsedMilliseconds;
                            long spRequestDuration = 0;
                            if (Mode.Has(MeasureResponseTimeMode.SPRequestDuration) ||
                                Mode.Has(MeasureResponseTimeMode.Latency))
                            {
                                //try get request duration from headers
                                spRequestDuration = GetSpRequestDuration(response);
                                if (Mode.Has(MeasureResponseTimeMode.SPRequestDuration))
                                {
                                    measurements[MeasureResponseTimeMode.SPRequestDuration].Add(spRequestDuration);
                                }
                            }
                            if (Mode.Has(MeasureResponseTimeMode.RoundTrip))
                            {
                                measurements[MeasureResponseTimeMode.RoundTrip].Add(rountTrip);
                            }
                            if (Mode.Has(MeasureResponseTimeMode.Latency))
                            {
                                measurements[MeasureResponseTimeMode.Latency].Add(rountTrip - spRequestDuration);
                            }
                        }
                        if (response.StatusCode != HttpStatusCode.OK)
                        {
                            WriteWarning($"Reply from {uri}: {(int)response.StatusCode}");
                        }
                    }
                    finally
                    {
                        if (response != null)
                        {
                            response.Dispose();
                        }
                    }
                    if (!isWarmUp)
                    {
                        WriteVerbose($"Reply from {uri}: {timer.ElapsedMilliseconds}ms");
                    }
                    WriteProgress($"Sleeping: {Timeout}ms", i);
                    Thread.Sleep((int)Timeout);
                }
                _progressRecord.RecordType = ProgressRecordType.Completed;
                WriteProgress(_progressRecord);
            }
            finally
            {
                List <ResponseTimeStatistics> response = new List <ResponseTimeStatistics>();
                foreach (var value in (MeasureResponseTimeMode[])Enum.GetValues(typeof(MeasureResponseTimeMode)))
                {
                    if (value != MeasureResponseTimeMode.Undefined &&
                        value != MeasureResponseTimeMode.All &&
                        Mode.Has(value))
                    {
                        var statistics = GetStatistics(measurements[value]);
                        statistics.Mode = value;
                        response.Add(statistics);
                    }
                    measurements[value] = new List <long>();
                }

                WriteObject(response, true);
            }
        }
コード例 #2
0
        public override void DeployModel(object modelHost, DefinitionBase model)
        {
            NintexFormDefinition formModel = (NintexFormDefinition)model;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = null,
                ObjectType       = typeof(Object),
                ObjectDefinition = formModel,
                ModelHost        = modelHost
            });

            //https://help.nintex.com/en-US/sdks/sdk2013/FormSDK/Topics/SDK_NF_API_OPS__2013_WWSvcOps.htm?tocpath=Nintex%20Software%20Development%20Kit%7CNintex%20Forms%202013%20Software%20Development%20Kit%7CNintex%20Forms%20SDK%20Samples%7CMigrate%20Forms%20with%20the%20Nintex%20Forms%20API%7CInvoking%20methods%20from%20the%20REST%20API%7C_____2
            //https://help.nintex.com/en-US/sdks/sdk2013/#FormSDK/Topics/SDK_NF_API_REF_PublishFormXml.htm%3FTocPath%3DNintex%2520Software%2520Development%2520Kit%7CNintex%2520Forms%25202013%2520Software%2520Development%2520Kit%7CNintex%2520Forms%25202013%2520SDK%2520Reference%7CWeb%2520Services%2520Reference%7C_____4

            base.DeployModel(modelHost, model);

            var    listModelHost   = modelHost.WithAssertAndCast <ListModelHost>("modelHost", value => value.RequireNotNull());
            var    web             = listModelHost.HostWeb;
            var    list            = listModelHost.HostList;
            var    clientContext   = listModelHost.HostClientContext;
            string formDigestValue = clientContext.GetFormDigestDirect().DigestValue;

            var publishUrl = UrlUtility.CombineUrl(clientContext.Url, "/_vti_bin/NintexFormsServices/NfRestService.svc/PublishFormXml");

            using (var webrequestexecutor = clientContext.WebRequestExecutorFactory.CreateWebRequestExecutor(clientContext, publishUrl))
            {
                webrequestexecutor.RequestContentType = "application/json";
                webrequestexecutor.RequestContentType = "application/json; charset=utf-8";

                webrequestexecutor.RequestHeaders.Add("X-RequestDigest", formDigestValue);
                //executor.RequestHeaders.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                //executor.RequestHeaders.Add(HttpRequestHeader.ContentEncoding, "utf-8");
                webrequestexecutor.RequestMethod = "POST";

                var serializedObject = NintexFormSerialize.FromDefinition(formModel, clientContext, web, list);


                HttpWebRequest request = webrequestexecutor.WebRequest;
                ClientRuntimeContext.SetupRequestCredential(clientContext, request);
                var FireExecutingWebRequestEventInternalMethod = typeof(ClientContext).GetMethod("FireExecutingWebRequestEventInternal",
                                                                                                 BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                FireExecutingWebRequestEventInternalMethod.Invoke(clientContext, new object[] { new WebRequestEventArgs(webrequestexecutor) });

                var requestStream = webrequestexecutor.GetRequestStream();
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(NintexFormSerialize));
                ser.WriteObject(requestStream, serializedObject);
                requestStream.Close();

                var result   = "";
                var response = request.GetResponse();
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                {
                    result = sr.ReadToEnd();
                }

                //executor.Execute();
                //string result = "";

                //using (StreamReader sr = new StreamReader(executor.GetResponseStream()))
                //{
                //    result = sr.ReadToEnd();
                //}

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = result,
                    ObjectType       = typeof(string),
                    ObjectDefinition = formModel,
                    ModelHost        = modelHost
                });
            }
        }
コード例 #3
0
        protected override void ExecuteCmdlet()
        {
            var         uri          = GetEndpointUri();
            Stopwatch   timer        = new Stopwatch();
            List <long> measurements = new List <long>();

            try
            {
                for (int i = -(int)WarmUp; i < Count; i++)
                {
                    bool isWarmUp = i < 0;
                    var  probe    = WebRequest.CreateHttp(uri);
                    probe.AllowAutoRedirect = false;

                    ClientRuntimeContext.SetupRequestCredential(ClientContext, probe);
                    WriteProgress(isWarmUp ? $"Warming up: {WarmUp + i + 1}/{WarmUp}": $"Sending: {uri}", i);

                    HttpWebResponse response = null;
                    try
                    {
                        try
                        {
                            timer.Restart();
                            response = probe.GetResponse() as HttpWebResponse;
                            timer.Stop();
                        }
                        catch (WebException e)
                        {
                            timer.Stop();
                            response = e.Response as HttpWebResponse;
                            if (response == null)
                            {
                                throw;
                            }
                        }
                        if (!isWarmUp)
                        {
                            measurements.Add(timer.ElapsedMilliseconds);
                        }

                        if (response.StatusCode != HttpStatusCode.OK)
                        {
                            WriteWarning($"Reply from {uri}: {(int)response.StatusCode}");
                        }
                    }
                    finally
                    {
                        if (response != null)
                        {
                            response.Dispose();
                        }
                    }
                    if (!isWarmUp)
                    {
                        WriteVerbose($"Reply from {uri}: {timer.ElapsedMilliseconds}ms");
                    }
                    WriteProgress($"Sleeping: {Timeout}ms", i);
                    Thread.Sleep((int)Timeout);
                }
                _progressRecord.RecordType = ProgressRecordType.Completed;
                WriteProgress(_progressRecord);
            }
            finally
            {
                WriteObject(GetStatistics(measurements));
            }
        }
コード例 #4
0
        public override void DeployModel(object modelHost, DefinitionBase model)
        {
            NintexWorkflowDefinition WorkflowModel = (NintexWorkflowDefinition)model;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = null,
                ObjectType       = typeof(Object),
                ObjectDefinition = WorkflowModel,
                ModelHost        = modelHost
            });

            // https://help.nintex.com/en-US/sdks/sdk2013/#Walkthroughs/WK_Prc_NWF2013_exportandpublishaworkflow.htm%3FTocPath%3DNintex%2520Software%2520Development%2520Kit%7CModifying%2520and%2520Extending%2520Nintex%2520Workflow%2520and%2520Forms%7C_____5

            base.DeployModel(modelHost, model);

            var listModelHost = modelHost as ListModelHost;
            var baseModelHost = modelHost as CSOMModelHostBase;

            var web           = baseModelHost.HostWeb;
            var list          = listModelHost != null ? listModelHost.HostList : null;
            var clientContext = baseModelHost.HostClientContext;

            var formDigestValue = clientContext.GetFormDigestDirect().DigestValue;
            var publishUrl      = UrlUtility.CombineUrl(web.Url, "/_vti_bin/NintexWorkflow/Workflow.asmx");

            using (var executor = clientContext.WebRequestExecutorFactory.CreateWebRequestExecutor(clientContext, publishUrl))
            {
                executor.RequestMethod      = "POST";
                executor.RequestContentType = "text/xml; charset=utf-8";
                executor.RequestHeaders.Add("X-RequestDigest", formDigestValue);
                executor.RequestHeaders.Add("SOAPAction", "\"http://nintex.com/PublishFromNWFXml\"");
                executor.RequestHeaders.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                executor.WebRequest.AutomaticDecompression = DecompressionMethods.GZip;

                HttpWebRequest request = executor.WebRequest;
                ClientRuntimeContext.SetupRequestCredential(clientContext, request);
                var FireExecutingWebRequestEventInternalMethod = typeof(ClientContext).GetMethod("FireExecutingWebRequestEventInternal",
                                                                                                 BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                FireExecutingWebRequestEventInternalMethod.Invoke(clientContext, new object[] { new WebRequestEventArgs(executor) });

                var requestStream = executor.GetRequestStream();
                using (var streamWriter = new StreamWriter(requestStream, Encoding.UTF8))
                {
                    var formatedString = BuildSoapRequest(list, WorkflowModel);
                    streamWriter.Write(formatedString);
                }
                requestStream.Close();

                var result   = "";
                var response = request.GetResponse();
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                {
                    result = sr.ReadToEnd();
                    result = ReadSoapResponse(result);
                }


                //executor.Execute();

                //var result = ReadSoapResponse(executor);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = result,
                    ObjectType       = typeof(string),
                    ObjectDefinition = WorkflowModel,
                    ModelHost        = modelHost
                });
            }
        }