public static RequestSecurityToken CreateFrom(XmlReader xr)
 {
     return(RequestSecurityToken.ProcessRequestSecurityTokenElement(xr));
 }
        private static RequestSecurityToken ProcessRequestSecurityTokenElement(XmlReader xr)
        {
            if (xr == null)
            {
                throw new ArgumentNullException("xr");
            }
            if (xr.IsEmptyElement)
            {
                throw new ArgumentException("wst:RequestSecurityToken element was empty. Unable to create RequestSecurityToken object");
            }
            int             depth         = xr.Depth;
            string          attribute     = xr.GetAttribute("Context", string.Empty);
            string          tokenType     = string.Empty;
            string          text          = string.Empty;
            int             keySize       = 0;
            string          text2         = "http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey";
            EndpointAddress appliesTo     = null;
            SecurityToken   entropy       = null;
            SecurityToken   securityToken = null;

            while (xr.Read())
            {
                if (XmlNodeType.Element == xr.NodeType)
                {
                    if ("http://schemas.xmlsoap.org/ws/2005/02/trust" == xr.NamespaceURI)
                    {
                        if ("RequestType" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            xr.Read();
                            text = xr.ReadContentAsString();
                        }
                        else if ("TokenType" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            xr.Read();
                            tokenType = xr.ReadContentAsString();
                        }
                        else if ("KeySize" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            xr.Read();
                            keySize = xr.ReadContentAsInt();
                        }
                        else if ("KeyType" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            xr.Read();
                            text2 = xr.ReadContentAsString();
                        }
                        else if ("Entropy" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            entropy = RequestSecurityToken.ProcessEntropyElement(xr);
                        }
                        else
                        {
                            Console.WriteLine("Not processing element: {0}:{1}", xr.NamespaceURI, xr.LocalName);
                        }
                    }
                    else if ("http://schemas.xmlsoap.org/ws/2004/09/policy" == xr.NamespaceURI)
                    {
                        if ("AppliesTo" == xr.LocalName && !xr.IsEmptyElement)
                        {
                            appliesTo = RequestSecurityToken.ProcessAppliesToElement(xr);
                        }
                        else
                        {
                            Console.WriteLine("Not processing element: {0}:{1}", xr.NamespaceURI, xr.LocalName);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Not processing element: {0}:{1}", xr.NamespaceURI, xr.LocalName);
                    }
                }
                if ("RequestSecurityToken" == xr.LocalName && "http://schemas.xmlsoap.org/ws/2005/02/trust" == xr.NamespaceURI && xr.Depth == depth && XmlNodeType.EndElement == xr.NodeType)
                {
                    break;
                }
            }
            return(new RequestSecurityToken(attribute, tokenType, text, keySize, text2, securityToken, entropy, appliesTo));
        }