IInstanceContextProvider.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.ServiceModel.Dispatcher
  5. {
  6. using System;
  7. using System.ServiceModel;
  8. using System.ServiceModel.Channels;
  9. public interface IInstanceContextProvider
  10. {
  11. InstanceContext GetExistingInstanceContext(Message message, IContextChannel channel);
  12. void InitializeInstanceContext(InstanceContext instanceContext, Message message, IContextChannel channel);
  13. bool IsIdle(InstanceContext instanceContext);
  14. void NotifyIdle(InstanceContextIdleCallback callback, InstanceContext instanceContext);
  15. }
  16. internal abstract class InstanceContextProviderBase : IInstanceContextProvider
  17. {
  18. DispatchRuntime dispatchRuntime;
  19. public DispatchRuntime DispatchRuntime
  20. {
  21. get
  22. {
  23. return this.dispatchRuntime;
  24. }
  25. }
  26. internal InstanceContextProviderBase(DispatchRuntime dispatchRuntime)
  27. {
  28. this.dispatchRuntime = dispatchRuntime;
  29. }
  30. internal static bool IsProviderSingleton(IInstanceContextProvider provider)
  31. {
  32. return (provider is SingletonInstanceContextProvider);
  33. }
  34. internal static bool IsProviderSessionful(IInstanceContextProvider provider)
  35. {
  36. return (provider is PerSessionInstanceContextProvider);
  37. }
  38. internal static IInstanceContextProvider GetProviderForMode(InstanceContextMode instanceMode, DispatchRuntime runtime)
  39. {
  40. switch (instanceMode)
  41. {
  42. case InstanceContextMode.PerCall:
  43. return new PerCallInstanceContextProvider(runtime);
  44. case InstanceContextMode.PerSession:
  45. return new PerSessionInstanceContextProvider(runtime);
  46. case InstanceContextMode.Single:
  47. return new SingletonInstanceContextProvider(runtime);
  48. default:
  49. DiagnosticUtility.FailFast("InstanceContextProviderBase.GetProviderForMode: default");
  50. return null;
  51. }
  52. }
  53. internal static bool IsProviderPerCall(IInstanceContextProvider provider)
  54. {
  55. return (provider is PerCallInstanceContextProvider);
  56. }
  57. internal ServiceChannel GetServiceChannelFromProxy(IContextChannel channel)
  58. {
  59. ServiceChannel serviceChannel = channel as ServiceChannel;
  60. if (serviceChannel == null)
  61. {
  62. serviceChannel = ServiceChannelFactory.GetServiceChannel(channel);
  63. }
  64. return serviceChannel;
  65. }
  66. #region IInstanceContextProvider Members
  67. public virtual InstanceContext GetExistingInstanceContext(Message message, IContextChannel channel)
  68. {
  69. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
  70. }
  71. public virtual void InitializeInstanceContext(InstanceContext instanceContext, Message message, IContextChannel channel)
  72. {
  73. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
  74. }
  75. public virtual bool IsIdle(InstanceContext instanceContext)
  76. {
  77. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
  78. }
  79. public virtual void NotifyIdle(InstanceContextIdleCallback callback, InstanceContext instanceContext)
  80. {
  81. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
  82. }
  83. #endregion
  84. }
  85. }