private void ExecuteAndRetry(string description, ManageDelegationClient.WebMethodDelegate webMethod) { DateTime t = DateTime.UtcNow + ManageDelegationClient.ErrorRetryLimit; string validDirectUrl = this.ServiceEndpoint; this.Client.AllowAutoRedirect = false; WebProxy webProxy = LiveConfiguration.GetWebProxy(this.WriteVerbose); if (webProxy != null) { this.Client.Proxy = webProxy; } int num = 0; for (;;) { this.Client.Url = validDirectUrl; try { this.WriteVerbose(Strings.CallingDomainServicesEndPoint(description, validDirectUrl)); webMethod(); } catch (WebException ex) { if (DateTime.UtcNow > t) { throw; } HttpWebResponse httpWebResponse = ex.Response as HttpWebResponse; if (httpWebResponse == null) { throw; } HttpStatusCode statusCode = httpWebResponse.StatusCode; if (statusCode != HttpStatusCode.Found) { if (statusCode != HttpStatusCode.Forbidden) { throw; } Thread.Sleep(ManageDelegationClient.ErrorRetryInterval); } else { num++; if (num > 3) { throw; } validDirectUrl = this.GetValidDirectUrl(httpWebResponse); if (validDirectUrl == null) { throw; } } continue; } break; } }
internal static Uri GetLiveIdFederationMetadataEpr(FederationTrust.NamespaceProvisionerType provisionerType) { switch (provisionerType) { case FederationTrust.NamespaceProvisionerType.LiveDomainServices: return(LiveConfiguration.GetEndpoint(ServiceEndpointId.LiveFederationMetadata)); case FederationTrust.NamespaceProvisionerType.LiveDomainServices2: return(LiveConfiguration.GetEndpoint(ServiceEndpointId.MsoFederationMetadata)); default: throw new ArgumentException("provisionerType"); } }
public ManageDelegation1Client(string certificate, WriteVerboseDelegate writeVerbose) : base(LiveConfiguration.GetDomainServicesEpr().ToString(), certificate, writeVerbose) { this.manageDelegation = new ManageDelegation("ManageDelegation", new RemoteCertificateValidationCallback(ManageDelegationClient.InvalidCertificateHandler)); this.manageDelegation.ClientCertificates.Add(base.Certificate); }
internal static Uri GetDomainServices2Epr() { return(LiveConfiguration.GetEndpoint(ServiceEndpointId.DomainPartnerManageDelegation2)); }
protected XPathDocument GetFederationMetadataXPathDocument(Uri partnerFederationMetadataEpr) { if (null == partnerFederationMetadataEpr) { throw new ArgumentNullException("PartnerFederationMetadataEpr"); } this.WriteVerbose(Strings.RequestingFederationMetadataFromEndPoint(partnerFederationMetadataEpr.ToString())); Exception ex = null; string s = null; DateTime t = DateTime.UtcNow.Add(TimeSpan.FromMinutes(1.0)); do { if (ex != null) { this.WriteVerbose(Strings.FailedToRetrieveFederationMetadata(ex.ToString())); Thread.Sleep(TimeSpan.FromSeconds(5.0)); ex = null; } using (PartnerFederationMetadata.TimeOutWebClient timeOutWebClient = new PartnerFederationMetadata.TimeOutWebClient(59000)) { timeOutWebClient.Credentials = CredentialCache.DefaultCredentials; WebProxy webProxy = LiveConfiguration.GetWebProxy(this.WriteVerbose); timeOutWebClient.Proxy = (webProxy ?? new WebProxy()); timeOutWebClient.Headers.Add(HttpRequestHeader.UserAgent, "MicrosoftExchangeFedTrustManagement"); try { s = timeOutWebClient.DownloadString(partnerFederationMetadataEpr); } catch (WebException ex2) { ex = ex2; } catch (IOException ex3) { ex = ex3; } catch (ProtocolViolationException ex4) { ex = ex4; } } }while (ex != null && DateTime.UtcNow < t); if (ex != null) { throw new FederationMetadataException(Strings.ErrorAccessingFederationMetadata(ex.Message)); } XPathDocument result = null; try { StringReader textReader = new StringReader(s); result = SafeXmlFactory.CreateXPathDocument(textReader); } catch (XmlException ex5) { throw new FederationMetadataException(Strings.ErrorInvalidFederationMetadata(ex5.Message)); } catch (XPathException ex6) { throw new FederationMetadataException(Strings.ErrorInvalidFederationMetadata(ex6.Message)); } return(result); }
public ManageDelegation2Client(string domain, string signingDomain, string certificateThumbprint, WriteVerboseDelegate writeVerbose) : base(LiveConfiguration.GetDomainServices2Epr().ToString(), certificateThumbprint, writeVerbose) { this.manageDelegation = new ManageDelegation2("ManageDelegation2", new RemoteCertificateValidationCallback(ManageDelegationClient.InvalidCertificateHandler)); this.manageDelegation.Authenticator = SoapHttpClientAuthenticator.Create(base.Certificate); this.manageDelegation.DomainOwnershipProofHeaderValue = new DomainOwnershipProofHeader { Domain = domain, HashAlgorithm = "SHA-512", Signature = Convert.ToBase64String(FederatedDomainProofAlgorithm.GetSignature(base.Certificate, signingDomain)) }; }