LoginWindows.Logoff Method

Log off the current Project Server user who logged on with Windows authentication.

Namespace:  WebSvcLoginWindows
Assembly:  ProjectServerWebServices (in ProjectServerWebServices.dll)

Syntax

'Declaration
<SoapDocumentMethodAttribute("http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/Logoff", RequestNamespace := "http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/",  _
    ResponseNamespace := "http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub Logoff
'Usage
Dim instance As LoginWindows

instance.Logoff()
[SoapDocumentMethodAttribute("http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/Logoff", RequestNamespace = "http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/", 
    ResponseNamespace = "http://schemas.microsoft.com/office/project/server/webservices/LoginWindows/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void Logoff()

Remarks

After a successful log off, set the Credentials property to a null reference (Nothing in Visual Basic) for other PSI Web service objects in the same application. For more information, see How to: Log on to Project Server Programmatically.

Examples

The LogonPS method in the following example handles logon and the LogoffPS method handles logoff for both Project Server authentication and Windows authentication.

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

namespace LoginDemo
{
    class LoginUtils
    {
        const string LOGINWINDOWS = "_vti_bin/PSI/LoginWindows.asmx";
        const string LOGINFORMS = "_vti_bin/PSI/LoginForms.asmx";

        private static LoginWindowsWebSvc.LoginWindows loginWindows =
            new LoginWindowsWebSvc.LoginWindows();
        private static LoginFormsWebSvc.LoginForms loginForms =
            new LoginFormsWebSvc.LoginForms();
        private CookieContainer cookies = new CookieContainer();

        private string baseUrl; // Example: http://ServerName/ProjectServer/

        public LoginUtils()
        {
        }

        public string BaseUrl
        {
            get
            {
                return baseUrl;
            }
        }

        public CookieContainer Cookies
        {
            get
            {
                return loginForms.CookieContainer;
            }
        }

        // Log on Project Server.
        // Returns true for successful logon.
        public bool LogonPS(bool useWinLogon, string bUrl,
            string userName, string password)
        {
            bool logonSucceeded = false;
            baseUrl = bUrl;

            if (useWinLogon)
            {
                loginWindows.Url = baseUrl + LOGINWINDOWS;
                loginWindows.Credentials = CredentialCache.DefaultCredentials;

                if (loginWindows.Login()) logonSucceeded = true;
            }
            else  // Use LoginForms
            {
                loginForms.Url = baseUrl + LOGINFORMS;
                loginForms.CookieContainer = cookies;

                if (loginForms.Login(userName, password)) logonSucceeded = true;
            }
            return logonSucceeded;
        }

        // Log off Project Server.
        // Returns true for successful logoff.
        public bool LogoffPS(bool useWinLogon)
        {
            bool loggedOff = true;
            if (useWinLogon)
            {
                loginWindows.Logoff();
            }
            else
            {
                loginForms.Logoff();
            }
            return loggedOff;
        }
    }
}

The following code instantiates and uses the LoginUtils class for Project Server authentication. The project object is an example that shows how to remove the user context for a PSI Web service.

private bool windowsAuth = true;  // Use Windows authentication
private static LoginUtils loginUtils = new LoginUtils();
public static ProjectWebSvc.Project project = 
    new ProjectWebSvc.Project();
. . .
private void LogOff()
{
    bool loggedOff = false;
    string errMess = "";
    try
    {
        loggedOff = loginUtils.LogoffPS(windowsAuth);
    }
    catch (SoapException ex)
    {
        errMess = ex.Message.ToString();
    }
    catch (WebException ex)
    {
        errMess = ex.Message.ToString();
    }
    if (loggedOff)
    {
        RemoveContextInfo();
    }
    else
    {
        MessageBox.Show(errMess, "Logoff Error", MessageBoxButtons.OK, 
            MessageBoxIcon.Error);
    }
}

/// <summary>
/// Remove the user credentials or logon cookie from each PSI Web service object.
/// </summary>
public void RemoveContextInfo()
{
    if (windowsAuth)
    {
        project.Credentials = null;
    }
    else
    {
        project.CookieContainer = null;
    }
}

See Also

Reference

LoginWindows Class

LoginWindows Members

WebSvcLoginWindows Namespace