00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Net;
00014 using System.Web.Services.Protocols;
00015 using Mcs.Epm.MicrosoftProject.mpFx.LoginFormsWebService;
00016 using Mcs.Epm.MicrosoftProject.mpFx.LoginWindowsWebService;
00017 using Mcs.Epm.MicrosoftProject.mpFx.Proxies;
00018 using Mcs.Epm.MicrosoftProject.mpFx.SiteDataWebService;
00019
00020 using LibraryResources = Mcs.Epm.MicrosoftProject.mpFx.Properties.Resources;
00021
00022 namespace Mcs.Epm.MicrosoftProject.mpFx
00023 {
00024
00025
00026
00027 public class WebServices
00028 {
00029 #region Private Static Methods
00030
00031
00032
00033
00034
00035
00036
00037 internal static string AppendPath(string url,
00038 string path)
00039 {
00040 if (!url.EndsWith("/", StringComparison.OrdinalIgnoreCase))
00041 {
00042 url = url + "/";
00043 }
00044
00045 return url + path;
00046 }
00047
00048 #endregion
00049
00050 #region Instance Data
00051
00052 private ProjectServer _Parent;
00053 private CustomFieldsProxy _CustomFieldsWebService;
00054 private LookupTableProxy _LookupTablesWebService;
00055 private ProjectProxy _ProjectWebService;
00056 private QueueSystemProxy _QueueWebService;
00057 private ResourceProxy _ResourceWebService;
00058 private CalendarProxy _CalendarsWebService;
00059 private SecurityProxy _SecurityWebService;
00060 private StatusingProxy _StatusingWebService;
00061 private SiteData _SiteDataWebService;
00062 private AdminProxy _AdminProxy;
00063 private TimesheetProxy _TimesheetProxy;
00064 private EventsProxy _EventsProxy;
00065
00066 #endregion
00067
00068 #region Constructor
00069
00070
00071
00072
00073
00074 internal WebServices(ProjectServer parent)
00075 {
00076 _Parent = parent;
00077 }
00078
00079 #endregion
00080
00081 #region public Properties
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 public LoginWindows LoginWindows { get; set; }
00093
00094 public LoginForms LoginForms { get; set; }
00095
00096 public ProjectProxy Projects
00097 {
00098 get
00099 {
00100 if (_ProjectWebService == null)
00101 {
00102 _ProjectWebService = new ProjectProxy();
00103
00104 if (_Parent.IsImpersonating)
00105 {
00106 ConfigureService(_ProjectWebService, LocalServicePaths.ProjectService, true);
00107 }
00108 else
00109 {
00110 ConfigureService(_ProjectWebService, ServicePaths.ProjectService, true);
00111 }
00112 }
00113
00114 return _ProjectWebService;
00115 }
00116 set { _ProjectWebService = value; }
00117 }
00118
00119 public ResourceProxy Resources
00120 {
00121 get
00122 {
00123 if (_ResourceWebService == null)
00124 {
00125 _ResourceWebService = new ResourceProxy();
00126
00127 if (_Parent.IsImpersonating)
00128 {
00129 ConfigureService(_ResourceWebService, LocalServicePaths.ResourceService, true);
00130 }
00131 else
00132 {
00133 ConfigureService(_ResourceWebService, ServicePaths.ResourceService, true);
00134 }
00135
00136 }
00137
00138 return _ResourceWebService;
00139 }
00140 }
00141
00142 public CustomFieldsProxy CustomFields
00143 {
00144 get
00145 {
00146 if (_CustomFieldsWebService == null)
00147 {
00148 _CustomFieldsWebService = new CustomFieldsProxy();
00149
00150 if (_Parent.IsImpersonating)
00151 {
00152 ConfigureService(_CustomFieldsWebService, LocalServicePaths.CustomFieldsService, true);
00153 }
00154 else
00155 {
00156 ConfigureService(_CustomFieldsWebService, ServicePaths.CustomFieldsService, true);
00157 }
00158 }
00159 return _CustomFieldsWebService;
00160 }
00161 }
00162
00163 public LookupTableProxy LookupTables
00164 {
00165 get
00166 {
00167 if (_LookupTablesWebService == null)
00168 {
00169 _LookupTablesWebService = new LookupTableProxy();
00170
00171 if (_Parent.IsImpersonating)
00172 {
00173 ConfigureService(_LookupTablesWebService, LocalServicePaths.LookupTableService, true);
00174 }
00175 else
00176 {
00177 ConfigureService(_LookupTablesWebService, ServicePaths.LookupTableService, true);
00178 }
00179 }
00180
00181 return _LookupTablesWebService;
00182 }
00183 }
00184
00185 public QueueSystemProxy Queue
00186 {
00187 get
00188 {
00189 if (_QueueWebService == null)
00190 {
00191 _QueueWebService = new QueueSystemProxy();
00192
00193 if (_Parent.IsImpersonating)
00194 {
00195 ConfigureService(_QueueWebService, LocalServicePaths.QueueService, true);
00196 }
00197 else
00198 {
00199 ConfigureService(_QueueWebService, ServicePaths.QueueService, true);
00200 }
00201 }
00202
00203 return _QueueWebService;
00204 }
00205 }
00206
00207 public CalendarProxy Calendars
00208 {
00209 get
00210 {
00211 if (_CalendarsWebService == null)
00212 {
00213 _CalendarsWebService = new CalendarProxy();
00214
00215 if (_Parent.IsImpersonating)
00216 {
00217 ConfigureService(_CalendarsWebService, LocalServicePaths.CalendarsService, true);
00218 }
00219 else
00220 {
00221 ConfigureService(_CalendarsWebService, ServicePaths.CalendarsService, true);
00222 }
00223 }
00224
00225 return _CalendarsWebService;
00226 }
00227 }
00228
00229 public SecurityProxy Security
00230 {
00231 get
00232 {
00233 if (_SecurityWebService == null)
00234 {
00235 _SecurityWebService = new SecurityProxy();
00236
00237 if (_Parent.IsImpersonating)
00238 {
00239 ConfigureService(_SecurityWebService, LocalServicePaths.SecurityWebService, true);
00240 }
00241 else
00242 {
00243 ConfigureService(_SecurityWebService, ServicePaths.SecurityWebService, true);
00244 }
00245 }
00246
00247 return _SecurityWebService;
00248 }
00249 }
00250
00251 public StatusingProxy Statusing
00252 {
00253 get
00254 {
00255 if (_StatusingWebService == null)
00256 {
00257 _StatusingWebService = new StatusingProxy();
00258
00259 if (_Parent.IsImpersonating)
00260 {
00261 ConfigureService(_StatusingWebService, LocalServicePaths.StatusingWebService, true);
00262 }
00263 else
00264 {
00265 ConfigureService(_StatusingWebService, ServicePaths.StatusingWebService, true);
00266 }
00267 }
00268
00269 return _StatusingWebService;
00270 }
00271 }
00272
00273 public SiteData SiteData
00274 {
00275 get
00276 {
00277 if (_SiteDataWebService == null)
00278 {
00279 _SiteDataWebService = new SiteData();
00280
00281 ConfigureService(_SiteDataWebService, ServicePaths.SiteDataWebService, false);
00282 }
00283
00284 return _SiteDataWebService;
00285 }
00286 }
00287
00288 public TimesheetProxy Timesheet
00289 {
00290 get
00291 {
00292 if (_TimesheetProxy == null)
00293 {
00294 _TimesheetProxy = new TimesheetProxy();
00295
00296 if (_Parent.IsImpersonating)
00297 {
00298 ConfigureService(_TimesheetProxy, LocalServicePaths.TimesheetWebService, true);
00299 }
00300 else
00301 {
00302 ConfigureService(_TimesheetProxy, ServicePaths.TimesheetWebService, true);
00303 }
00304 }
00305
00306 return _TimesheetProxy;
00307 }
00308 }
00309
00310 public AdminProxy Administration
00311 {
00312 get
00313 {
00314 if (_AdminProxy == null)
00315 {
00316 _AdminProxy = new AdminProxy();
00317
00318 if (_Parent.IsImpersonating)
00319 {
00320 ConfigureService(_AdminProxy, LocalServicePaths.AdminWebService, true);
00321 }
00322 else
00323 {
00324 ConfigureService(_AdminProxy, ServicePaths.AdminWebService, true);
00325 }
00326 }
00327
00328 return _AdminProxy;
00329 }
00330 }
00331
00332 public EventsProxy Events
00333 {
00334 get
00335 {
00336 if (_EventsProxy == null)
00337 {
00338 _EventsProxy = new EventsProxy();
00339
00340 if (_Parent.IsImpersonating)
00341 {
00342 ConfigureService(_EventsProxy, LocalServicePaths.EventsWebService, true);
00343 }
00344 else
00345 {
00346 ConfigureService(_EventsProxy, ServicePaths.EventsWebService, true);
00347 }
00348 }
00349
00350 return _EventsProxy;
00351 }
00352 }
00353
00354 #endregion
00355
00356 #region Private Methods
00357
00358
00359
00360
00361
00362
00363
00364 private void ConfigureService(HttpWebClientProtocol service,
00365 string servicePath,
00366 bool checkImpersonation)
00367 {
00368
00369 service.Credentials = CredentialCache.DefaultNetworkCredentials;
00370
00371 if (_Parent.IsImpersonating && checkImpersonation)
00372 {
00373 service.Url = AppendPath(_Parent.SPPBaseURL, servicePath);
00374 service.UseDefaultCredentials = false;
00375 }
00376 else
00377 {
00378 service.Url = AppendPath(_Parent.Site.OriginalString, servicePath);
00379 service.UseDefaultCredentials = true;
00380 }
00381
00382 switch (_Parent.AuthenticationType)
00383 {
00384 case AuthenticationType.Windows:
00385 break;
00386 case AuthenticationType.Forms:
00387 service.CookieContainer = _Parent.CookieContainer;
00388 break;
00389 default:
00390 throw new ArgumentOutOfRangeException(LibraryResources.InvalidAuthenticationType);
00391 }
00392 }
00393
00394 #endregion
00395
00396 #region Internal Methods
00397
00398 protected internal static void Dispose(SoapHttpClientProtocol service)
00399 {
00400 if (service != null)
00401 {
00402 service.Dispose();
00403 }
00404 }
00405
00406 #endregion
00407 }
00408 }