public static void WriteResponse(RequestSecurityTokenResponse response, XmlWriter writer, WSTrustSerializationContext context, WSTrustResponseSerializer responseSerializer, WSTrustConstantsAdapter trustConstants) { if (response == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("response"); } if (writer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("writer"); } if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (responseSerializer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("responseSerializer"); } if (trustConstants == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("trustConstants"); } responseSerializer.Validate(response); // Step 1: Write RSTR start element writer.WriteStartElement(trustConstants.Prefix, trustConstants.Elements.RequestSecurityTokenResponse, trustConstants.NamespaceURI); // Step 2: Write known RSTR attributes, i.e. Context if (!string.IsNullOrEmpty(response.Context)) { writer.WriteAttributeString(trustConstants.Attributes.Context, response.Context); } // Step 3: Write known RSTR elements responseSerializer.WriteKnownResponseElement(response, writer, context); // Step 4: Write custom RSTR elements foreach (KeyValuePair<string, object> messageParam in response.Properties) { responseSerializer.WriteXmlElement(writer, messageParam.Key, messageParam.Value, response, context); } // Step 5: Write RSTR end element to close it writer.WriteEndElement(); }
public static RequestSecurityTokenResponse CreateResponse(XmlReader reader, WSTrustSerializationContext context, WSTrustResponseSerializer responseSerializer, WSTrustConstantsAdapter trustConstants) { if (reader == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("reader"); } if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } if (responseSerializer == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("responseSerializer"); } if (trustConstants == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("trustConstants"); } if (!reader.IsStartElement(trustConstants.Elements.RequestSecurityTokenResponse, trustConstants.NamespaceURI)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WSTrustSerializationException(SR.GetString(SR.ID3032, reader.LocalName, reader.NamespaceURI, trustConstants.Elements.RequestSecurityTokenResponse, trustConstants.NamespaceURI))); } RequestSecurityTokenResponse rstr = responseSerializer.CreateInstance(); bool isEmptyElement = reader.IsEmptyElement; rstr.Context = reader.GetAttribute(trustConstants.Attributes.Context); reader.Read(); if (!isEmptyElement) { while (reader.IsStartElement()) { responseSerializer.ReadXmlElement(reader, rstr, context); } reader.ReadEndElement(); } responseSerializer.Validate(rstr); return rstr; }