Esempio n. 1
0
        public void DispatchTwinChanged(
            [EventHubTrigger(Const.EventHubNames.TwinChanged, Connection = Const.ConnectionString.EventHubsConnectionStringTwinChanged)] EventData[] eventData,
            ILogger log)
        {
            log.EnterJson("EventData: {0}", new object[] { eventData });
            Result result = null;

            void actionIfFailedWhenStoreUnexpected(Exception ex, string json) => log.Error(ex, nameof(Resources.CO_DSP_DTC_003), new object[] { json });

            try
            {
                foreach (EventData eachEventData in eventData)
                {
                    RmsEvent dispatchEvent = null;
                    string   rawBody       = null;

                    try
                    {
                        // ログ出力用のJSON文字列を取得する
                        rawBody = GetRawBodyForDeviceTwinChanged(eachEventData);

                        // イベントクラスに変換
                        dispatchEvent = ConvertTwinChanged(eachEventData);
                    }
                    catch (Exception e)
                    {
                        // EventDataがnullまたはEdgeIDをEventDataから取得できない
                        log.Error(e, nameof(Resources.CO_DSP_DTC_006));
                        StoreUnexpectedEvent(Const.EventHubNames.TwinChanged, rawBody, actionIfFailedWhenStoreUnexpected);
                        continue;  // returnせずに次のEventを処理する
                    }

                    try
                    {
                        result = _service.StoreTwinChanged(dispatchEvent);

                        if (!result.IsSuccess())
                        {
                            StoreUnexpectedEvent(Const.EventHubNames.TwinChanged, rawBody, actionIfFailedWhenStoreUnexpected);
                        }
                    }
                    catch (Exception e)
                    {
                        log.Error(e, nameof(Resources.CO_DSP_DTC_001));
                        StoreUnexpectedEvent(Const.EventHubNames.TwinChanged, rawBody, actionIfFailedWhenStoreUnexpected);
                    }
                }
            }
            finally
            {
                log.LeaveJson("Response: {0}", result);
            }
        }