DataContractSerializerServiceBehavior.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel.Dispatcher
  5. {
  6. using System.ServiceModel.Channels;
  7. using System.ServiceModel;
  8. using System.ServiceModel.Description;
  9. using System.Runtime.Serialization;
  10. using System.Collections.ObjectModel;
  11. using System.Collections.Generic;
  12. internal class DataContractSerializerServiceBehavior : IServiceBehavior, IEndpointBehavior
  13. {
  14. bool ignoreExtensionDataObject;
  15. int maxItemsInObjectGraph;
  16. internal DataContractSerializerServiceBehavior(bool ignoreExtensionDataObject, int maxItemsInObjectGraph)
  17. {
  18. this.ignoreExtensionDataObject = ignoreExtensionDataObject;
  19. this.maxItemsInObjectGraph = maxItemsInObjectGraph;
  20. }
  21. public bool IgnoreExtensionDataObject
  22. {
  23. get { return this.ignoreExtensionDataObject; }
  24. set { this.ignoreExtensionDataObject = value; }
  25. }
  26. public int MaxItemsInObjectGraph
  27. {
  28. get { return this.maxItemsInObjectGraph; }
  29. set { this.maxItemsInObjectGraph = value; }
  30. }
  31. void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase)
  32. {
  33. }
  34. void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters)
  35. {
  36. }
  37. void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
  38. {
  39. ApplySerializationSettings(description, ignoreExtensionDataObject, maxItemsInObjectGraph);
  40. }
  41. void IEndpointBehavior.Validate(ServiceEndpoint serviceEndpoint)
  42. {
  43. }
  44. void IEndpointBehavior.AddBindingParameters(ServiceEndpoint serviceEndpoint, BindingParameterCollection parameters)
  45. {
  46. }
  47. void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime clientRuntime)
  48. {
  49. ApplySerializationSettings(serviceEndpoint, ignoreExtensionDataObject, maxItemsInObjectGraph);
  50. }
  51. void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher)
  52. {
  53. ApplySerializationSettings(serviceEndpoint, ignoreExtensionDataObject, maxItemsInObjectGraph);
  54. }
  55. internal static void ApplySerializationSettings(ServiceDescription description, bool ignoreExtensionDataObject, int maxItemsInObjectGraph)
  56. {
  57. foreach (ServiceEndpoint endpoint in description.Endpoints)
  58. {
  59. if (!endpoint.InternalIsSystemEndpoint(description))
  60. {
  61. ApplySerializationSettings(endpoint, ignoreExtensionDataObject, maxItemsInObjectGraph);
  62. }
  63. }
  64. }
  65. internal static void ApplySerializationSettings(ServiceEndpoint endpoint, bool ignoreExtensionDataObject, int maxItemsInObjectGraph)
  66. {
  67. foreach (OperationDescription operation in endpoint.Contract.Operations)
  68. {
  69. foreach (IOperationBehavior ob in operation.Behaviors)
  70. {
  71. if (ob is DataContractSerializerOperationBehavior)
  72. {
  73. DataContractSerializerOperationBehavior behavior = (DataContractSerializerOperationBehavior)ob;
  74. if (behavior != null)
  75. {
  76. if (!behavior.IgnoreExtensionDataObjectSetExplicit)
  77. {
  78. behavior.ignoreExtensionDataObject = ignoreExtensionDataObject;
  79. }
  80. if (!behavior.MaxItemsInObjectGraphSetExplicit)
  81. {
  82. behavior.maxItemsInObjectGraph = maxItemsInObjectGraph;
  83. }
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }