private ChannelProtectionRequirements GetProtectionRequirements() { ChannelProtectionRequirements requirements = new ChannelProtectionRequirements(); MessagePartSpecification signedReliabilityMessageParts = WsrmIndex.GetSignedReliabilityMessageParts(this.reliableMessagingVersion); requirements.IncomingSignatureParts.AddParts(signedReliabilityMessageParts); requirements.OutgoingSignatureParts.AddParts(signedReliabilityMessageParts); if (this.reliableMessagingVersion == System.ServiceModel.ReliableMessagingVersion.WSReliableMessagingFebruary2005) { ScopedMessagePartSpecification signaturePart = requirements.IncomingSignatureParts; ScopedMessagePartSpecification encryptionPart = requirements.IncomingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/AckRequested"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence"); signaturePart = requirements.OutgoingSignatureParts; encryptionPart = requirements.OutgoingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"); ProtectProtocolMessage(signaturePart, encryptionPart, "http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence"); return(requirements); } if (this.reliableMessagingVersion != System.ServiceModel.ReliableMessagingVersion.WSReliableMessaging11) { throw Fx.AssertAndThrow("Reliable messaging version not supported."); } ScopedMessagePartSpecification incomingSignatureParts = requirements.IncomingSignatureParts; ScopedMessagePartSpecification incomingEncryptionParts = requirements.IncomingEncryptionParts; ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/AckRequested"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequence"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/fault"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse"); incomingSignatureParts = requirements.OutgoingSignatureParts; incomingEncryptionParts = requirements.OutgoingEncryptionParts; ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/AckRequested"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequenceResponse"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/fault"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/SequenceAcknowledgement"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence"); ProtectProtocolMessage(incomingSignatureParts, incomingEncryptionParts, "http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse"); return(requirements); }
private ChannelProtectionRequirements GetProtectionRequirements() { // Listing headers that must be signed. ChannelProtectionRequirements result = new ChannelProtectionRequirements(); MessagePartSpecification signedReliabilityMessageParts = WsrmIndex.GetSignedReliabilityMessageParts( _reliableMessagingVersion); result.IncomingSignatureParts.AddParts(signedReliabilityMessageParts); result.OutgoingSignatureParts.AddParts(signedReliabilityMessageParts); if (_reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessagingFebruary2005) { // Adding RM protocol message actions so that each RM protocol message's body will be // signed and encrypted. // From the Client to the Service ScopedMessagePartSpecification signaturePart = result.IncomingSignatureParts; ScopedMessagePartSpecification encryptionPart = result.IncomingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.AckRequestedAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.CreateSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.SequenceAcknowledgementAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.LastMessageAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.TerminateSequenceAction); // From the Service to the Client signaturePart = result.OutgoingSignatureParts; encryptionPart = result.OutgoingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.CreateSequenceResponseAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.SequenceAcknowledgementAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.LastMessageAction); ProtectProtocolMessage(signaturePart, encryptionPart, WsrmFeb2005Strings.TerminateSequenceAction); } else if (_reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11) { // Adding RM protocol message actions so that each RM protocol message's body will be // signed and encrypted. // From the Client to the Service ScopedMessagePartSpecification signaturePart = result.IncomingSignatureParts; ScopedMessagePartSpecification encryptionPart = result.IncomingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.AckRequestedAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CloseSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CloseSequenceResponseAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CreateSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.FaultAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.SequenceAcknowledgementAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.TerminateSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.TerminateSequenceResponseAction); // From the Service to the Client signaturePart = result.OutgoingSignatureParts; encryptionPart = result.OutgoingEncryptionParts; ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.AckRequestedAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CloseSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CloseSequenceResponseAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.CreateSequenceResponseAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.FaultAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.SequenceAcknowledgementAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.TerminateSequenceAction); ProtectProtocolMessage(signaturePart, encryptionPart, Wsrm11Strings.TerminateSequenceResponseAction); } else { throw Fx.AssertAndThrow("Reliable messaging version not supported."); } return(result); }