The code is somewhat modified for clarity.
The error object:
[DataContract]
public class GLSErrorObject
{
[DataMember]
public string ErrorID { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public DateTime ErrorTime { get; set; }
}
On the server side:
public bool Login(string userName, string password, out GLSErrorObject GLSError)
{
GLSError = null;
try
{
bool success = AuthenticateUser(userName, password);
return success;
}
catch (Exception ex)
{
GLSError = new GLSErrorObject();
GLSError.ErrorMessage = ex.Message;
GLSError.ErrorTime = DateTime.Now;
//etc...
}
return false;
}
And on the client side the callback method will look something like this:
void AuthenticationClient_LoginCompleted(object sender, LoginCompletedEventArgs e)
{
if (e.Error != null)
{
throw new Exception(e.Error.Message);
return;
}
else if (e.GLSError != null)
{
//Handle our custom error
throw new Exception(e.GLSError.ErrorMessage);
}
else
{
//All is well
}
//etc...
/Henrik