/// <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; } } } } } }
/// <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; } } } } }