MessageOperationFormatter.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.ServiceModel.Dispatcher
  5. {
  6. using System;
  7. using System.ServiceModel.Channels;
  8. using System.Collections;
  9. using System.Runtime.Serialization;
  10. using System.ServiceModel.Diagnostics;
  11. internal sealed class MessageOperationFormatter : IClientMessageFormatter, IDispatchMessageFormatter
  12. {
  13. static MessageOperationFormatter instance;
  14. internal static MessageOperationFormatter Instance
  15. {
  16. get
  17. {
  18. if (MessageOperationFormatter.instance == null)
  19. MessageOperationFormatter.instance = new MessageOperationFormatter();
  20. return MessageOperationFormatter.instance;
  21. }
  22. }
  23. public object DeserializeReply(Message message, object[] parameters)
  24. {
  25. if (message == null)
  26. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("message"));
  27. if (parameters != null && parameters.Length > 0)
  28. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxParametersMustBeEmpty)));
  29. return message;
  30. }
  31. public void DeserializeRequest(Message message, object[] parameters)
  32. {
  33. if (message == null)
  34. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("message"));
  35. if (parameters == null)
  36. throw TraceUtility.ThrowHelperError(new ArgumentNullException("parameters"), message);
  37. if (parameters.Length != 1)
  38. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxParameterMustBeArrayOfOneElement)));
  39. parameters[0] = message;
  40. }
  41. public bool IsFault(string operation, Exception error)
  42. {
  43. return false;
  44. }
  45. public MessageFault SerializeFault(Exception error)
  46. {
  47. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxMessageOperationFormatterCannotSerializeFault)));
  48. }
  49. public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
  50. {
  51. if (!(result is Message))
  52. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxResultMustBeMessage)));
  53. if (parameters != null && parameters.Length > 0)
  54. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxParametersMustBeEmpty)));
  55. return (Message)result;
  56. }
  57. public Message SerializeRequest(MessageVersion messageVersion, object[] parameters)
  58. {
  59. if (parameters == null)
  60. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("parameters"));
  61. if (parameters.Length != 1 || !(parameters[0] is Message))
  62. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxParameterMustBeMessage)));
  63. return (Message)parameters[0];
  64. }
  65. }
  66. }