// Set the PSI client endpoints programmatically; don't use app.config. public static bool SetClientEndpointsProg(string pwaUrl) { const int MAXSIZE = int.MaxValue; const string SVC_ROUTER = "/_vti_bin/PSI/ProjectServer.svc"; bool isHttps = pwaUrl.ToLower().StartsWith("https"); bool result = true; BasicHttpBinding binding = null; try { if (isHttps) { // Create a binding for HTTPS.TimesheetL binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); } else { // Create a binding for HTTP. binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); } binding.Name = "basicHttpConf"; binding.MessageEncoding = WSMessageEncoding.Text; binding.CloseTimeout = new TimeSpan(00, 05, 00); binding.OpenTimeout = new TimeSpan(00, 05, 00); binding.ReceiveTimeout = new TimeSpan(00, 05, 00); binding.SendTimeout = new TimeSpan(00, 05, 00); binding.TextEncoding = System.Text.Encoding.UTF8; // If the TransferMode is buffered, the MaxBufferSize and // MaxReceived MessageSize must be the same value. binding.TransferMode = TransferMode.Buffered; binding.MaxBufferSize = MAXSIZE; binding.MaxReceivedMessageSize = MAXSIZE; binding.MaxBufferPoolSize = MAXSIZE; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; binding.GetType().GetProperty("ReaderQuotas").SetValue(binding, XmlDictionaryReaderQuotas.Max, null); // The endpoint address is the ProjectServer.svc router for all public PSI calls. EndpointAddress address = new EndpointAddress(pwaUrl + SVC_ROUTER); adminClient = new SvcAdmin.AdminClient(binding, address); adminClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; adminClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; projectClient = new SvcProject.ProjectClient(binding, address); projectClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; projectClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; queueSystemClient = new SvcQueueSystem.QueueSystemClient(binding, address); queueSystemClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; queueSystemClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; resourceClient = new SvcResource.ResourceClient(binding, address); resourceClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; resourceClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; lookupTableClient = new SvcLookupTable.LookupTableClient(binding, address); lookupTableClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; lookupTableClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; customFieldsClient = new SvcCustomFields.CustomFieldsClient(binding, address); customFieldsClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; customFieldsClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; calendarClient = new SvcCalendar.CalendarClient(binding, address); calendarClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; calendarClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; archiveClient = new SvcArchive.ArchiveClient(binding, address); archiveClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; archiveClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; pwaClient = new SvcStatusing.StatusingClient(binding, address); pwaClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; pwaClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; timesheetClient = new SvcTimeSheet.TimeSheetClient(binding, address); timesheetClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; timesheetClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; queueClient = new SvcQueueSystem.QueueSystemClient(binding, address); queueClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; queueClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; workFlowClient = new SvcWorkflow.WorkflowClient(binding, address); workFlowClient.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; workFlowClient.ChannelFactory.Credentials.Windows.AllowNtlm = true; } catch (Exception ex) { result = false; } return result; }
// Configure the PSI client endpoints by using the settings in app.config. public static bool ConfigClientEndpoints() { bool result = true; string[] endpoints = { ENDPOINT_ADMIN, ENDPOINT_Q, ENDPOINT_RES, ENDPOINT_PROJ, ENDPOINT_LUT, ENDPOINT_CF, ENDPOINT_CAL, ENDPOINT_AR, ENDPOINT_PWA }; try { foreach (string endPt in endpoints) { switch (endPt) { case ENDPOINT_ADMIN: adminClient = new SvcAdmin.AdminClient(endPt); break; case ENDPOINT_PROJ: projectClient = new SvcProject.ProjectClient(endPt); break; case ENDPOINT_Q: queueSystemClient = new SvcQueueSystem.QueueSystemClient(endPt); break; case ENDPOINT_RES: resourceClient = new SvcResource.ResourceClient(endPt); break; case ENDPOINT_LUT: lookupTableClient = new SvcLookupTable.LookupTableClient(endPt); break; case ENDPOINT_CF: customFieldsClient = new SvcCustomFields.CustomFieldsClient(endPt); break; case ENDPOINT_CAL: calendarClient = new SvcCalendar.CalendarClient(endPt); break; case ENDPOINT_AR: archiveClient = new SvcArchive.ArchiveClient(endPt); break; case ENDPOINT_PWA: pwaClient = new SvcStatusing.StatusingClient(endPt); break; default: result = false; Console.WriteLine("Invalid endpoint: {0}", endPt); break; } } } catch (Exception ex) { result = false; } return result; }