/// <summary>
 /// Invalidates a login token.
 /// </summary>
 /// <param name="token">The login token.</param>
 public void InvalidateToken(UserToken token) {
   tokenCache.InvalidateToken(token);
 }
 /// <summary>
 /// Adds the security header.
 /// </summary>
 /// <param name="soapHeader">The SOAP header.</param>
 /// <param name="token">The user token.</param>
 private void AddSecurityHeader(XmlElement soapHeader, UserToken token)
 {
     string securityXml = string.Join("\n", new string[] {
       "<" + WSSE_PREFIX + ":Security xmlns:" + SOAP_PREFIX + "='" + SOAP_NAMESPACE + "'",
       "xmlns:" + WSSE_PREFIX + "='" + WSSE_NAMESPACE + "'",
       SOAP_PREFIX + ":mustUnderstand='1'>",
     "<" + WSSE_PREFIX + ":UsernameToken>",
       "<" + WSSE_PREFIX + ":Username>" + token.Username + "</" + WSSE_PREFIX +
           ":Username>",
       "<" + WSSE_PREFIX + ":Password>" + token.Password + "</" + WSSE_PREFIX +
           ":Password>",
     "</" + WSSE_PREFIX + ":UsernameToken>",
       "</" + WSSE_PREFIX + ":Security>"});
       XmlDocumentFragment securityHeader = soapHeader.OwnerDocument.CreateDocumentFragment();
       securityHeader.InnerXml = securityXml;
       soapHeader.AppendChild(securityHeader);
 }
 /// <summary>
 /// Adds a login token to cache.
 /// </summary>
 /// <param name="username">The DFA user name.</param>
 /// <param name="password">The DFA user password.</param>
 /// <param name="token">The login token.</param>
 /// <returns>
 /// The login token.
 /// </returns>
 public UserToken AddToken(string username, UserToken token) {
   ValidateParams(username);
   return tokenCache.AddToken(username, token);
 }