예제 #1
0
        /// <summary>
        ///     This is the main entry point for your service instance.
        /// </summary>
        /// <param name="cancelServiceInstance">Canceled when Service Fabric terminates this instance.</param>
        protected override async Task RunAsync(CancellationToken cancelServiceInstance)
        {
            var configSection = ServiceInitializationParameters.CodePackageActivationContext
                                .GetConfigurationPackageObject("Config");
            var conStr =
                configSection.Settings.Sections["ServiceConfigSection"].Parameters["EventHubConnectionString"].Value;
            var eventHubName        = configSection.Settings.Sections["ServiceConfigSection"].Parameters["EventHubName"].Value;
            var sqlConnectionString =
                configSection.Settings.Sections["ServiceConfigSection"].Parameters["SqlConnectionString"].Value;
            var      eventHubClient = EventHubClient.CreateFromConnectionString(conStr, eventHubName);
            DateTime timeStamp      = DateTime.Now;
            var      proxy          = ActorProxy.Create <IIoTHubPartitionMap>(new ActorId(1),
                                                                              ServiceInitializationParameters.CodePackageActivationContext.ApplicationName);
            var dataPackage = ServiceInitializationParameters.CodePackageActivationContext.GetDataPackageObject("Data");

            VINParser.VINParser parser = new VINParser.VINParser(Path.Combine(dataPackage.Path, "wmis.json"));

            while (!cancelServiceInstance.IsCancellationRequested)
            {
                string partition = proxy.LeaseTHubPartitionAsync().Result;
                if (partition == "")
                {
                    await Task.Delay(TimeSpan.FromSeconds(15), cancelServiceInstance);
                }
                else
                {
                    var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup()
                                           .CreateReceiver(partition, DateTime.UtcNow);
                    while (!cancelServiceInstance.IsCancellationRequested)
                    {
                        EventData eventData = await eventHubReceiver.ReceiveAsync();

                        if (eventData != null)
                        {
                            string  data = Encoding.UTF8.GetString(eventData.GetBytes());
                            TripVIN vin  = JsonConvert.DeserializeObject <TripVIN>(data);
                            try
                            {
                                var carInfo = parser.Parse(vin.VIN);
                                SaveRecord(sqlConnectionString, vin.VIN, carInfo);
                            }
                            catch (Exception exp)
                            {
                                ServiceEventSource.Current.ServiceRequestFailed("VINLookupService",
                                                                                "Failed to Save VIN: " + exp.Message);
                            }
                        }
                        if (DateTime.Now - timeStamp > TimeSpan.FromSeconds(20))
                        {
                            string lease = proxy.RenewIoTHubPartitionLeaseAsync(partition).Result;
                            if (lease == "")
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        ///     This is the main entry point for your service instance.
        /// </summary>
        /// <param name="cancelServiceInstance">Canceled when Service Fabric terminates this instance.</param>
        protected override async Task RunAsync(CancellationToken cancelServiceInstance)
        {
            var configSection = ServiceInitializationParameters.CodePackageActivationContext
                .GetConfigurationPackageObject("Config");
            var conStr =
                configSection.Settings.Sections["ServiceConfigSection"].Parameters["EventHubConnectionString"].Value;
            var eventHubName = configSection.Settings.Sections["ServiceConfigSection"].Parameters["EventHubName"].Value;
            var sqlConnectionString =
                configSection.Settings.Sections["ServiceConfigSection"].Parameters["SqlConnectionString"].Value;
            var eventHubClient = EventHubClient.CreateFromConnectionString(conStr, eventHubName);
            DateTime timeStamp = DateTime.Now;
            var proxy = ActorProxy.Create<IIoTHubPartitionMap>(new ActorId(1),
                ServiceInitializationParameters.CodePackageActivationContext.ApplicationName);
            var dataPackage = ServiceInitializationParameters.CodePackageActivationContext.GetDataPackageObject("Data");

            VINParser.VINParser parser = new VINParser.VINParser(Path.Combine(dataPackage.Path, "wmis.json"));

            while (!cancelServiceInstance.IsCancellationRequested)
            {
                string partition = proxy.LeaseTHubPartitionAsync().Result;
                if (partition == "")
                    await Task.Delay(TimeSpan.FromSeconds(15), cancelServiceInstance);
                else
                {
                    var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup()
                        .CreateReceiver(partition, DateTime.UtcNow);
                    while (!cancelServiceInstance.IsCancellationRequested)
                    {
                        EventData eventData = await eventHubReceiver.ReceiveAsync();
                        if (eventData != null)
                        {
                            string data = Encoding.UTF8.GetString(eventData.GetBytes());
                            TripVIN vin = JsonConvert.DeserializeObject<TripVIN>(data);
                            try
                            {
                                var carInfo = parser.Parse(vin.VIN);
                                SaveRecord(sqlConnectionString, vin.VIN, carInfo);
                            }
                            catch (Exception exp)
                            {
                                ServiceEventSource.Current.ServiceRequestFailed("VINLookupService",
                                    "Failed to Save VIN: " + exp.Message);
                            }
                        }
                        if (DateTime.Now - timeStamp > TimeSpan.FromSeconds(20))
                        {
                            string lease = proxy.RenewIoTHubPartitionLeaseAsync(partition).Result;
                            if (lease == "")
                                break;
                        }
                    }
                }
            }
        }