Правильным способом было бы определить договоры о неисправностях. Например, в вашем веб-сервисе вы можете сделать следующее:
[DataContract]
public class NoRoomsAvailableFaultContract
{
[DataMember]
public string Message { get; set; }
}
Далее вы объявляете этот контракт для данной сервисной операции
[ServiceContract]
public interface IMyServiceContract
{
[OperationContract]
[FaultContract(typeof(NoRoomsAvailableFaultContract))]
void MyOperation();
}
И вы реализуете это так:
public class MyService : IMyServiceContract
{
public void MyOperation()
{
if (somethingWentWrong)
{
var faultContract = new NoRoomsAvailableFaultContract()
{
Message = "ERROR MESSAGE"
};
throw new FaultException<NoRoomsAvailableFaultContract>(faultContract);
}
}
}
В этом случае NoRoomsAvailableFaultContract будет представлен в WSDL, а svcutil.exe может создать прокси-класс. Тогда вы можете поймать это исключение:
try
{
myServiceProxy.MyOperation();
}
catch (FaultException<NoRoomsAvailableFaultContract> ex)
{
Console.WriteLine(ex.Message);
}