I have a web service that runs perfectly when i reference it from within the project solution. As soon as i upload it to the remote server, it starts blowing up. Unfortunately, the only error message I get is on the client side “faultexception was unhandled by user code”. Inside of the web service, I have exceptions handled in all of the methods, so I’m pretty sure it’s getting caught somewhere, but I don’t know how to see it. I suspect that the problem is permissions related, but I can’t see where it’s happening.
I tried placing an error message into object returns, but it’s still not making it out; something like this:
public bool SetDirectReports(ADUser user)
{
try
{
var adEntry = new DirectoryEntry(string.Format("LDAP://<GUID={0}>", user.Guid), "administrator", "S3cur1ty");
if (adEntry.Properties["directReports"].Count > 0)
{
user.DirectReports = new List<ADUser>();
foreach (string directReport in adEntry.Properties["directReports"]) //is being returned as full distinguished name
{
var dr = new DirectoryEntry(string.Format("LDAP://{0}", directReport), "administrator", "S3cur1ty");
user.DirectReports.Add(GetUserByGuid(dr.NativeGuid));
}
return true;
}
else
{
user.DirectReports = new List<ADUser>();
return false;
}
}
catch (Exception ex)
{
user.HasError = true;
user.ErrorMessage = "Error setting direct reports: " + ex.Message;
return false;
}
}
but its’ still not catching. I was hoping for a better approach. I’m not sure if I could add something that would output the exception to the console or what. Any help would be appreciated. TIA
P.S. this isn’t necessarily the method thats crashing, there’s a web of them in the service.
You should dump all of your exceptions to a log file on the server side; exposing error information to the client is a potential security risk, which is why it’s turned off by default.
If you really want to send exception information to the client, you can turn it on. If you are using a WCF service you should set the “includeExceptionDetailsInFaults” property on for the service behavior, as described in this MSDN article on dealing with unhandled exceptions in WCF. Once you do so, you will have a property on the
FaultExceptioncalledDetailthat should itself be a type ofException.For better error handling you should also take a look at typed faults using the
FaultContractandFaultException<>class; these have the benefit that they don’t throw the channel into a faulted state and can be handled correctly:If you are using an ASP.NET Web Service, you should set the
customErrorsmode to “Off” in your web.config. This will send back the entire exception detail as HTML, which the client should receive as part of the SOAP exception that it receives.