ComPlusServiceHost.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. #pragma warning disable 1634, 1691
  5. namespace System.ServiceModel.ComIntegration
  6. {
  7. using System;
  8. using System.ServiceModel.Dispatcher;
  9. using System.ServiceModel.Description;
  10. using System.Collections.Generic;
  11. using System.Collections.ObjectModel;
  12. using System.Runtime.Diagnostics;
  13. using System.Runtime.InteropServices;
  14. using System.ServiceModel;
  15. using System.ServiceModel.Configuration;
  16. using System.Diagnostics;
  17. using System.ServiceModel.Diagnostics;
  18. abstract class ComPlusServiceHost : ServiceHostBase
  19. {
  20. ServiceInfo info;
  21. protected void Initialize (Guid clsid,
  22. ServiceElement service,
  23. ComCatalogObject applicationObject,
  24. ComCatalogObject classObject,
  25. HostingMode hostingMode)
  26. {
  27. VerifyFunctionality();
  28. this.info = new ServiceInfo(clsid,
  29. service,
  30. applicationObject,
  31. classObject,
  32. hostingMode);
  33. base.InitializeDescription(new UriSchemeKeyedCollection());
  34. }
  35. protected override void ApplyConfiguration()
  36. {
  37. }
  38. protected override ServiceDescription CreateDescription(out IDictionary<string, ContractDescription> implementedContracts)
  39. {
  40. try
  41. {
  42. ComPlusServiceLoader loader = new ComPlusServiceLoader(this.info);
  43. ServiceDescription description = loader.Load(this);
  44. implementedContracts = null;
  45. return description;
  46. }
  47. catch (Exception e)
  48. {
  49. DiagnosticUtility.EventLog.LogEvent(TraceEventType.Error,
  50. (ushort)System.Runtime.Diagnostics.EventLogCategory.ComPlus,
  51. (uint)System.Runtime.Diagnostics.EventLogEventId.ComPlusServiceHostStartingServiceError,
  52. this.info.AppID.ToString(),
  53. this.info.Clsid.ToString(),
  54. e.ToString());
  55. throw;
  56. }
  57. }
  58. protected override void InitializeRuntime()
  59. {
  60. ComPlusServiceHostTrace.Trace(TraceEventType.Information, TraceCode.ComIntegrationServiceHostStartingService,
  61. SR.TraceCodeComIntegrationServiceHostStartingService, this.info);
  62. try
  63. {
  64. DispatcherBuilder dispatcherBuilder = new DispatcherBuilder();
  65. dispatcherBuilder.InitializeServiceHost(this.Description, this);
  66. }
  67. catch (Exception e)
  68. {
  69. if (System.ServiceModel.DiagnosticUtility.ShouldTraceError)
  70. {
  71. DiagnosticUtility.EventLog.LogEvent(TraceEventType.Error,
  72. (ushort)System.Runtime.Diagnostics.EventLogCategory.ComPlus,
  73. (uint)System.Runtime.Diagnostics.EventLogEventId.ComPlusServiceHostStartingServiceError,
  74. this.info.AppID.ToString(),
  75. this.info.Clsid.ToString(),
  76. e.ToString());
  77. }
  78. throw;
  79. }
  80. ComPlusServiceHostTrace.Trace(TraceEventType.Verbose, TraceCode.ComIntegrationServiceHostStartedServiceDetails,
  81. SR.TraceCodeComIntegrationServiceHostStartedServiceDetails, this.info, this.Description);
  82. ComPlusServiceHostTrace.Trace(TraceEventType.Information, TraceCode.ComIntegrationServiceHostStartedService,
  83. SR.TraceCodeComIntegrationServiceHostStartedService, this.info);
  84. }
  85. protected override void OnClose(TimeSpan timeout)
  86. {
  87. ComPlusServiceHostTrace.Trace(TraceEventType.Information, TraceCode.ComIntegrationServiceHostStoppingService,
  88. SR.TraceCodeComIntegrationServiceHostStoppingService, this.info);
  89. base.OnClose(timeout);
  90. ComPlusServiceHostTrace.Trace(TraceEventType.Information, TraceCode.ComIntegrationServiceHostStoppedService,
  91. SR.TraceCodeComIntegrationServiceHostStoppedService, this.info);
  92. }
  93. protected void VerifyFunctionality()
  94. {
  95. object serviceConfig = new CServiceConfig();
  96. IServiceSysTxnConfig sysTxnconfing = serviceConfig as IServiceSysTxnConfig;
  97. if (sysTxnconfing == null)
  98. {
  99. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.QFENotPresent());
  100. }
  101. }
  102. }
  103. }