public void Login(Action<LoginResult> endLogin, string server, int port, string userName, string password, Language language, string oldSessionId = null)
        {
            if (this._MessageClient == null)
            {
                this._MessageClient = new MessageClient();
            }

            EndpointAddress address = new EndpointAddress(string.Format("net.tcp://{0}:{1}/Service", server, port));
            NetTcpBinding binding = new NetTcpBinding(SecurityMode.None) { MaxReceivedMessageSize = Int32.MaxValue };
            DuplexChannelFactory<IClientService> factory = new DuplexChannelFactory<IClientService>(this._MessageClient, binding, address);
            this._ServiceProxy = factory.CreateChannel();
            this._ServiceProxy.BeginLogin(userName, password, oldSessionId, language, delegate(IAsyncResult ar)
            {
                LoginResult result = this._ServiceProxy.EndLogin(ar);
                if (result.Succeeded)
                {
                    this._SessionId = result.SessionId;
                    //this.GetAccessPermissions(this.EndGetPermissions);
                }
                endLogin(result);
            }, null);
        }
        public void Login(Action<LoginResult, string> endLogin, string server, int port, string userName, string password, Language language)
        {
            if (this._MessageClient == null)
            {
                this._MessageClient = new MessageClient();
            }

            this._Server = server;
            this._Port = port;
            this.CreateChannel();
            this._ServiceProxy.BeginLogin(userName, password, language, delegate(IAsyncResult ar)
            {
                try
                {
                    LoginResult result = this._ServiceProxy.EndLogin(ar);
                    this._User = result.User;
                    Principal.Instance.User = result.User;
                    if (result.Succeeded)
                    {
                        App.MainFrameWindow.StatusBar.ShowUserConnectionState(ConnectionState.Connected);
                        App.MainFrameWindow.StatusBar.ShowLoginUser(this._User.UserName);
                        this._IsLoggedIn = true;
                        ICommunicationObject communicationObject = this._ServiceProxy as ICommunicationObject;
                        communicationObject.Faulted += communicationObject_Faulted;
                        this._SessionId = result.SessionId;
                        if (this._User.IsAdmin)
                        {
                            Principal.Instance.UserPermission = new UserPermission();
                        }
                        else
                        {
                            this.GetAccessPermissions(this.EndGetPermissions);
                        }
                    }
                    endLogin(result, null);
                }
                catch (EndpointNotFoundException ex)
                {
                    endLogin(null, "Server not found: " + ex.Message);
                }
                catch (CommunicationException)
                {
                    endLogin(null, "Invalid user name or password.");
                }
                catch (Exception ex)
                {
                    endLogin(null, ex.Message);
                    Logger.TraceEvent(TraceEventType.Error, "Login failed: \r\n{0}", ex.Message);
                }
            }, null);
        }