protected void HandleFailedDomain(string operationName, EhfDomainItem domain, DomainResponseInfo response, ref int transientFailureCount, ref int permanentFailureCount) { if (response.Status == ResponseStatus.TransientFailure) { transientFailureCount++; } else { permanentFailureCount++; } string responseTargetValuesString = EhfProvisioningService.GetResponseTargetValuesString(response); EdgeSyncDiag diagSession = base.DiagSession; string messageFormat = "Failed to {0}: FaultId={1}; FaultType={2}; FaultDetail={3}; Target={4}; TargetValues=({5}); DN=({6}); Name={7}; AD-GUID=({8}); EHF-GUID=({9}); EHF-Company-ID={10}"; object[] array = new object[11]; array[0] = operationName; array[1] = response.Fault.Id; array[2] = response.Status; array[3] = (response.Fault.Detail ?? "null"); array[4] = response.Target; array[5] = responseTargetValuesString; array[6] = domain.DistinguishedName; array[7] = domain.Name; array[8] = domain.GetDomainGuid(); object[] array2 = array; int num = 9; Guid? domainGuid = response.DomainGuid; array2[num] = ((domainGuid != null) ? domainGuid.GetValueOrDefault() : "null"); array[10] = domain.Domain.CompanyId; domain.AddSyncError(diagSession.LogAndTraceError(messageFormat, array)); }
private void HandleFailedCompany(string operationName, EhfCompanyItem company, CompanyResponseInfo response, ref int transientFailureCount, ref int permanentFailureCount) { if (response.Status == ResponseStatus.TransientFailure) { transientFailureCount++; } else { permanentFailureCount++; } string text = (company.Company != null) ? company.Company.Name : "not available"; string responseTargetValuesString = EhfProvisioningService.GetResponseTargetValuesString(response); EdgeSyncDiag diagSession = base.DiagSession; string messageFormat = "Failed to {0}: FaultId={1}; FaultType={2}; FaultDetail={3}; Target={4}; TargetValues=({5}); DN=({6}); AD-Name={7}; EHF-Name={8}; AD-GUID=({9}); EHF-GUID=({10}); EHF-ID={11}"; object[] array = new object[12]; array[0] = operationName; array[1] = response.Fault.Id; array[2] = response.Status; array[3] = (response.Fault.Detail ?? "null"); array[4] = response.Target; array[5] = responseTargetValuesString; array[6] = company.DistinguishedName; array[7] = text; array[8] = (response.CompanyName ?? "null"); array[9] = company.GetCompanyGuid(); object[] array2 = array; int num = 10; Guid? companyGuid = response.CompanyGuid; array2[num] = ((companyGuid != null) ? companyGuid.GetValueOrDefault() : "null"); array[11] = response.CompanyId; company.AddSyncError(diagSession.LogAndTraceError(messageFormat, array)); }
protected override void InternalProcessRecord() { ITopologyConfigurationSession session = this.CreateSession(); EhfTargetServerConfig config = Utils.CreateEhfTargetConfig(session, this.ConnectorId, this); using (EhfProvisioningService ehfProvisioningService = new EhfProvisioningService(config)) { Exception ex = null; try { this.InvokeWebService(session, config, ehfProvisioningService); } catch (FaultException <ServiceFault> faultException) { ServiceFault detail = faultException.Detail; if (detail.Id == FaultId.UnableToConnectToDatabase) { ex = new InvalidOperationException("ServiceFault: EHF is unable to connect to its database", faultException); } else { ex = faultException; } } catch (MessageSecurityException ex2) { switch (EhfProvisioningService.DecodeMessageSecurityException(ex2)) { case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure: ex = new InvalidOperationException("MessageSecurityException: EHF is unable to connect to its database", ex2.InnerException); goto IL_A4; case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials: ex = new InvalidOperationException("MessageSecurityException: EHF connector contains invalid credentials", ex2.InnerException); goto IL_A4; } ex = ex2; IL_A4 :; } catch (CommunicationException ex3) { ex = ex3; } catch (TimeoutException ex4) { ex = ex4; } catch (EhfProvisioningService.ContractViolationException ex5) { ex = ex5; } if (ex != null) { base.WriteError(ex, ErrorCategory.InvalidOperation, null); } } }
protected void InvokeProvisioningService(string operationName, EhfSynchronizer.ProvisioningServiceCall serviceCall, int numberOfEntries) { ExEventLog.EventTuple eventTuple = default(ExEventLog.EventTuple); Exception ex = null; EhfProvisioningService.MessageSecurityExceptionReason messageSecurityExceptionReason = EhfProvisioningService.MessageSecurityExceptionReason.Other; this.DiagSession.Tracer.TraceDebug <string>((long)this.DiagSession.GetHashCode(), "Executing EHF provisioning operation {0}", operationName); int transientExceptionRetryCount = this.Config.EhfSyncAppConfig.TransientExceptionRetryCount; bool flag = true; do { if (ex != null) { this.LogAndTraceException(operationName, ex, messageSecurityExceptionReason.ToString(), transientExceptionRetryCount + 1); } try { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); serviceCall(); stopwatch.Stop(); this.ehfConnection.PerfCounterHandler.OnOperationSuccessfullyCompleted(operationName, stopwatch.ElapsedMilliseconds, numberOfEntries); this.DiagSession.LogAndTraceInfo(EdgeSyncLoggingLevel.High, "Successfully executed EHF provisioning operation {0}", new object[] { operationName }); return; } catch (FaultException <ServiceFault> faultException) { ex = faultException; ServiceFault detail = faultException.Detail; if (detail.Id == FaultId.UnableToConnectToDatabase) { eventTuple = EdgeSyncEventLogConstants.Tuple_EhfTransientFailure; this.ehfConnection.PerfCounterHandler.OnOperationTransientFailure(operationName); } else { eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure; this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName); } } catch (MessageSecurityException ex2) { messageSecurityExceptionReason = EhfProvisioningService.DecodeMessageSecurityException(ex2); switch (messageSecurityExceptionReason) { case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure: ex = ex2.InnerException; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfTransientFailure; this.ehfConnection.PerfCounterHandler.OnOperationTransientFailure(operationName); goto IL_186; case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials: ex = ex2.InnerException; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfInvalidCredentials; this.ehfConnection.PerfCounterHandler.OnOperationInvalidCredentialsFailure(operationName); flag = false; goto IL_186; } ex = ex2; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure; this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName); IL_186 :; } catch (CommunicationException ex3) { ex = ex3; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfCommunicationFailure; this.ehfConnection.PerfCounterHandler.OnOperationCommunicationFailure(operationName); } catch (TimeoutException ex4) { ex = ex4; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfOperationTimedOut; this.ehfConnection.PerfCounterHandler.OnOperationTimeoutFailure(operationName); flag = false; } catch (EhfProvisioningService.ContractViolationException ex5) { ex = ex5; eventTuple = EdgeSyncEventLogConstants.Tuple_EhfServiceContractViolation; this.ehfConnection.PerfCounterHandler.OnOperationContractViolationFailure(operationName); flag = false; } }while (flag && transientExceptionRetryCount-- > 0); if (ex != null) { this.EventLogAndTraceException(operationName, eventTuple, ex, messageSecurityExceptionReason.ToString()); this.ehfConnection.AbortSyncCycle(ex); } }
internal override void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService) { IPAddress[] array = null; IPAddress[] array2 = null; if (this.dnsServerIPAddresses != null && this.fqdnTemplate != null) { ADSite site = null; ADNotificationAdapter.TryRunADOperation(delegate() { site = ((ITopologyConfigurationSession)session).GetLocalSite(); }); if (site == null) { base.WriteError(new InvalidOperationException("Unable to find ADSite object"), ErrorCategory.InvalidOperation, null); } Dns dns = new Dns(); dns.Timeout = TimeSpan.FromSeconds(30.0); dns.ServerList = new DnsServerList(); dns.ServerList.Initialize(this.dnsServerIPAddresses.ToArray()); array = this.ResolveInboundVirtualIPs(dns, site.PartnerId, this.fqdnTemplate); } if (this.outboundIPAddresses != null && this.outboundIPAddresses.Count > 0) { array2 = this.outboundIPAddresses.ToArray(); } if (array != null || array2 != null) { CompanyResponseInfo companyResponseInfo = provisioningService.UpdateReseller(config.ResellerId, array, array2); if (companyResponseInfo.Status != ResponseStatus.Success) { this.HandleFailure(companyResponseInfo); } } }
internal override void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService) { Company reseller = provisioningService.GetReseller(config.ResellerId); List <IPAddress> list = new List <IPAddress>(); if (reseller.Settings.InboundIPList != null && reseller.Settings.InboundIPList.IPList != null && reseller.Settings.InboundIPList.IPList.Length == 1 && reseller.Settings.InboundIPList.IPList[0].IPList != null) { SmtpProfileEntry[] iplist = reseller.Settings.InboundIPList.IPList[0].IPList; foreach (SmtpProfileEntry smtpProfileEntry in iplist) { IPAddress item; if (IPAddress.TryParse(smtpProfileEntry.IP, out item)) { list.Add(item); } else { this.WriteWarning(new LocalizedString("Unable to parse inbound IP address: " + smtpProfileEntry.IP)); } } } List <IPAddress> list2 = new List <IPAddress>(); if (reseller.Settings.OutboundIPList != null && reseller.Settings.OutboundIPList.IPList != null) { foreach (string text in reseller.Settings.OutboundIPList.IPList) { IPAddress item2; if (IPAddress.TryParse(text, out item2)) { list2.Add(item2); } else { this.WriteWarning(new LocalizedString("Unable to parse outbound IP address: " + text)); } } } base.WriteObject(new DCPerimeterConfig(list.ToArray(), list2.ToArray())); }
internal abstract void InvokeWebService(IConfigurationSession session, EhfTargetServerConfig config, EhfProvisioningService provisioningService);
private EhfCompanyRecord CreateEhfCompanyRecord(SyncedPerimeterConfig perimeterConfig) { EhfCompanyRecord result = null; Exception ex = null; try { Company company = null; int companyId; if (!this.ehfService.TryGetCompanyByGuid(perimeterConfig.Guid, out company) && int.TryParse(perimeterConfig.PerimeterOrgId, out companyId)) { company = this.ehfService.GetCompany(companyId); } if (company != null) { Domain[] allDomains = this.ehfService.GetAllDomains(company.CompanyId); result = new EhfCompanyRecord(company, allDomains); } } catch (FaultException <ServiceFault> faultException) { ServiceFault detail = faultException.Detail; if (detail.Id == FaultId.UnableToConnectToDatabase) { ex = new InvalidOperationException("ServiceFault: EHF is unable to connect to its database", faultException); } else { if (detail.Id == FaultId.CompanyDoesNotExist) { return(null); } ex = faultException; } } catch (MessageSecurityException ex2) { switch (EhfProvisioningService.DecodeMessageSecurityException(ex2)) { case EhfProvisioningService.MessageSecurityExceptionReason.DatabaseFailure: ex = new InvalidOperationException("MessageSecurityException: EHF is unable to connect to its database", ex2.InnerException); goto IL_E6; case EhfProvisioningService.MessageSecurityExceptionReason.InvalidCredentials: ex = new InvalidOperationException("MessageSecurityException: EHF connector contains invalid credentials", ex2.InnerException); goto IL_E6; } ex = ex2; IL_E6 :; } catch (CommunicationException ex3) { ex = ex3; } catch (TimeoutException ex4) { ex = ex4; } catch (EhfProvisioningService.ContractViolationException ex5) { ex = ex5; } if (ex != null) { base.WriteError(ex, ErrorCategory.InvalidOperation, null); } return(result); }