internal override void ValidateContract(NativeActivityContext context, OperationDescription targetOperation, object owner, MessageDirection direction) { MessageDescription targetMessage; string overridingAction; bool isResponse; SerializerOption serializerOption; if (direction == MessageDirection.Input) { Fx.Assert(targetOperation.Messages.Count >= 1, "There must be at least one MessageDescription in an OperationDescription!"); targetMessage = targetOperation.Messages[0]; Send send = owner as Send; Fx.Assert(send != null, "The parent of a SendMessageContent with in-message can only be Send!"); overridingAction = send.Action; serializerOption = send.SerializerOption; isResponse = false; } else { Fx.Assert(targetOperation.Messages.Count == 2, "There must be exactly two MessageDescription objects for a two-way operation!"); targetMessage = targetOperation.Messages[1]; SendReply sendReply = owner as SendReply; Fx.Assert(sendReply != null, "The parent of a SendMessageContent with out-message can only be SendReply!"); Fx.Assert(sendReply.Request != null, "SendReply.Request should not be null by now!"); overridingAction = sendReply.Action; serializerOption = sendReply.Request.SerializerOption; isResponse = true; } if (!this.IsFault) { ContractValidationHelper.ValidateAction(context, targetMessage, overridingAction, targetOperation, isResponse); if (ContractValidationHelper.IsSendParameterContent(targetOperation)) { Constraint.AddValidationError(context, new ValidationError(SR.MisuseOfMessageContent(targetOperation.Name, targetOperation.DeclaringContract.Name))); } else { ContractValidationHelper.ValidateMessageContent(context, targetMessage, this.InternalDeclaredMessageType, serializerOption, targetOperation, isResponse); } } else { Fx.Assert(this.InternalDeclaredMessageType != null, "IsFault returns true only when argument is of exception type!"); Type argumentType = this.InternalDeclaredMessageType; if (argumentType.IsGenericType && argumentType.GetGenericTypeDefinition() == ContractInferenceHelper.FaultExceptionType) { Type faultType = argumentType.GetGenericArguments()[0]; ContractValidationHelper.ValidateFault(context, targetOperation, overridingAction, faultType); } } }
internal override void ValidateContract(NativeActivityContext context, OperationDescription targetOperation, object owner, MessageDirection direction) { MessageDescription targetMessage; string overridingAction; bool isResponse; if (direction == MessageDirection.Input) { Fx.Assert(targetOperation.Messages.Count >= 1, "There must be at least one MessageDescription in an OperationDescription!"); targetMessage = targetOperation.Messages[0]; Fx.Assert(owner is Send, "The parent of a SendParametersContent with in-message can only be Send!"); overridingAction = ((Send)owner).Action; isResponse = false; } else { Fx.Assert(targetOperation.Messages.Count == 2, "There must be exactly two MessageDescription objects for a two-way operation!"); targetMessage = targetOperation.Messages[1]; Fx.Assert(owner is SendReply, "The parent of a SendParametersContent with out-message can only be SendReply!"); overridingAction = ((SendReply)owner).Action; isResponse = true; } if (!this.IsFault) { ContractValidationHelper.ValidateAction(context, targetMessage, overridingAction, targetOperation, isResponse); if (ContractValidationHelper.IsSendParameterContent(targetOperation)) { ContractValidationHelper.ValidateParametersContent(context, targetMessage, (IDictionary)this.Parameters, targetOperation, isResponse); } else { Constraint.AddValidationError(context, new ValidationError(SR.MisuseOfParameterContent(targetOperation.Name, targetOperation.DeclaringContract.Name))); } } else { Fx.Assert(this.argumentTypes != null && this.argumentTypes.Length == 1, "Exception should be the only parameter in SendFault!"); Type argumentType = this.argumentTypes[0]; if (argumentType.IsGenericType && argumentType.GetGenericTypeDefinition() == ContractInferenceHelper.FaultExceptionType) { Type faultType = argumentType.GetGenericArguments()[0]; ContractValidationHelper.ValidateFault(context, targetOperation, overridingAction, faultType); } } }
internal override void ValidateContract(NativeActivityContext context, OperationDescription targetOperation, object owner, MessageDirection direction) { MessageDescription targetMessage; string overridingAction; bool isResponse; SerializerOption serializerOption; if (direction == MessageDirection.Input) { Fx.Assert(targetOperation.Messages.Count >= 1, "There must be at least one MessageDescription in an OperationDescription!"); targetMessage = targetOperation.Messages[0]; Receive receive = owner as Receive; Fx.Assert(receive != null, "The parent of a ReceiveMessageContent with in-message can only be Receive!"); overridingAction = receive.Action; serializerOption = receive.SerializerOption; isResponse = false; } else { Fx.Assert(targetOperation.Messages.Count == 2, "There must be exactly two MessageDescription objects for a two-way operation!"); targetMessage = targetOperation.Messages[1]; ReceiveReply receiveReply = owner as ReceiveReply; Fx.Assert(receiveReply != null, "The parent of a ReceiveMessageContent with out-message can only be ReceiveReply!"); Fx.Assert(receiveReply.Request != null, "ReceiveReply.Request should not be null by now!"); overridingAction = receiveReply.Action; serializerOption = receiveReply.Request.SerializerOption; isResponse = true; } ContractValidationHelper.ValidateAction(context, targetMessage, overridingAction, targetOperation, isResponse); if (ContractValidationHelper.IsReceiveParameterContent(targetOperation)) { Constraint.AddValidationError(context, new ValidationError(SR.MisuseOfMessageContent(targetOperation.Name, targetOperation.DeclaringContract.Name))); } else { ContractValidationHelper.ValidateMessageContent(context, targetMessage, this.InternalDeclaredMessageType, serializerOption, targetOperation, isResponse); } }
internal override void ValidateContract(NativeActivityContext context, OperationDescription targetOperation, object owner, MessageDirection direction) { MessageDescription targetMessage; string overridingAction; bool isResponse; if (direction == MessageDirection.Input) { Fx.Assert(targetOperation.Messages.Count >= 1, "There must be at least one MessageDescription in an OperationDescription!"); targetMessage = targetOperation.Messages[0]; Fx.Assert(owner is Receive, "The parent of a ReceiveParametersContent with in-message can only be Receive!"); overridingAction = ((Receive)owner).Action; isResponse = false; } else { Fx.Assert(targetOperation.Messages.Count == 2, "There must be exactly two MessageDescription objects for a two-way operation!"); targetMessage = targetOperation.Messages[1]; Fx.Assert(owner is ReceiveReply, "The parent of a ReceiveParametersContent with out-message can only be ReceiveReply!"); overridingAction = ((ReceiveReply)owner).Action; isResponse = true; } ContractValidationHelper.ValidateAction(context, targetMessage, overridingAction, targetOperation, isResponse); if (ContractValidationHelper.IsReceiveParameterContent(targetOperation)) { ContractValidationHelper.ValidateParametersContent(context, targetMessage, (IDictionary)this.Parameters, targetOperation, isResponse); } else { Constraint.AddValidationError(context, new ValidationError(SR.MisuseOfParameterContent(targetOperation.Name, targetOperation.DeclaringContract.Name))); } }