Beispiel #1
0
        public async Task <IEnumerable <string> > GetJobResponsesAsync()
        {
            var jobQuery = _jobClient.CreateQuery();

            var results = new List <string>();

            while (jobQuery.HasMoreResults)
            {
                results.AddRange(await jobQuery.GetNextAsJsonAsync());
            }

            return(results);
        }
        static void Main(string[] args)
        {
            string jobId = "DHCMD" + Guid.NewGuid().ToString();

            // The query condition can also be on a single device Id or on a list of device Ids.
            // https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-query-language covers
            //   IoT Hub query language in additional detail.
            string query = $"DeviceId IN ['{deviceId}']";

            Twin twin = new Twin(deviceId);

            twin.Tags = new TwinCollection();
            twin.Tags[TestTagName] = TestTagValue;

            // *************************************** Start JobClient ***************************************
            Console.WriteLine($"Create JobClient from the connectionString...");
            JobClient jobClient = JobClient.CreateFromConnectionString(connectionString);

            Console.WriteLine($"JobClient created with success");
            Console.WriteLine();

            // *************************************** Schedule twin job ***************************************
            Console.WriteLine($"Schedule twin job {jobId} for {deviceId}...");
            JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync(
                jobId, query, twin, DateTime.UtcNow, (long)TimeSpan.FromMinutes(2).TotalSeconds).Result;

            Console.WriteLine($"Schedule response");
            Console.WriteLine(JsonConvert.SerializeObject(createJobResponse, Formatting.Indented));
            Console.WriteLine();

            // *************************************** Get all Jobs ***************************************
            IEnumerable <JobResponse> queryResults = jobClient.CreateQuery().GetNextAsJobResponseAsync().Result;
            var getJobs = queryResults.ToList();

            Console.WriteLine($"getJobs return {getJobs.Count} result(s)");

            foreach (JobResponse job in getJobs)
            {
                Console.WriteLine(JsonConvert.SerializeObject(job, Formatting.Indented));

                if (job.Status != JobStatus.Completed)
                {
                    Console.WriteLine($"Incorrect query jobs result");
                    return;
                }
            }
            Console.WriteLine();

            // *************************************** Check completion ***************************************
            Console.WriteLine($"Monitoring jobClient for job completion...");
            JobResponse jobResponse = jobClient.GetJobAsync(jobId).Result;

            Console.WriteLine($"First result");
            Console.WriteLine(JsonConvert.SerializeObject(jobResponse, Formatting.Indented));
            while (jobResponse.Status != JobStatus.Completed)
            {
                Task.Delay(TimeSpan.FromMilliseconds(100));
                jobResponse = jobClient.GetJobAsync(jobId).Result;
            }
            Console.WriteLine($"Job ends with status {jobResponse.Status}");
        }
Beispiel #3
0
        public async Task RunSampleAsync()
        {
            string jobId = "JOBSAMPLE" + Guid.NewGuid().ToString();

            // The query condition can also be on a single device Id or on a list of device Ids.
            // https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-query-language covers
            //   IoT Hub query language in additional detail.
            //string query = $"DeviceId IN ['{DeviceId}']";
            string query = $"*";

            var twin = new Twin(DeviceId)
            {
                Tags = new TwinCollection()
            };

            twin.Tags[TestTagName] = TestTagValue;


            // *************************************** Schedule twin job ***************************************
            Console.WriteLine($"Schedule twin job {jobId} for {DeviceId}...");
            JobResponse createJobResponse = await _jobClient
                                            .ScheduleTwinUpdateAsync(
                jobId,
                query,
                twin,
                DateTime.UtcNow,
                (long)TimeSpan.FromMinutes(2).TotalSeconds)
                                            .ConfigureAwait(false);

            Console.WriteLine("Schedule response");
            Console.WriteLine(JsonSerializer.Serialize(createJobResponse, new JsonSerializerOptions {
                WriteIndented = true
            }));
            Console.WriteLine();

            // *************************************** Get all Jobs ***************************************
            IEnumerable <JobResponse> queryResults = await _jobClient.CreateQuery().GetNextAsJobResponseAsync().ConfigureAwait(false);

            List <JobResponse> getJobs = queryResults.ToList();

            Console.WriteLine($"getJobs return {getJobs.Count} result(s)");

            foreach (JobResponse job in getJobs)
            {
                Console.WriteLine(JsonSerializer.Serialize(job, new JsonSerializerOptions {
                    WriteIndented = true
                }));
            }

            Console.WriteLine();

            // *************************************** Check completion ***************************************
            Console.WriteLine("Monitoring jobClient for job completion...");
            JobResponse jobResponse = await _jobClient.GetJobAsync(jobId).ConfigureAwait(false);

            Console.WriteLine("First result");
            Console.WriteLine(JsonSerializer.Serialize(jobResponse, new JsonSerializerOptions {
                WriteIndented = true
            }));

            Console.Write("Waiting for completion ");
            while (jobResponse.Status != JobStatus.Completed)
            {
                Console.Write(". ");
                await Task.Delay(TimeSpan.FromMilliseconds(500));

                jobResponse = await _jobClient.GetJobAsync(jobId).ConfigureAwait(false);
            }

            Console.WriteLine("DONE");

            Console.WriteLine($"Job ends with status {jobResponse.Status}");
        }