После некоторого addtional исследования работал следующий измененный код:
if(!DidItPass)
{
InvalidRoutingCodeFault fault = new InvalidRoutingCodeFault("Invalid Routing Code - No Approval Started");
throw new FaultException<InvalidRoutingCodeFault>(fault, new FaultReason("Invalid Routing Code - No Approval Started"));
}
serviceDebug includeExceptionDetailInFaults="true"
не решение
следующие работы кода даже с serviceDebug includeExceptionDetailInFaults="false"
// data contract
[DataContract]
public class FormatFault
{
private string additionalDetails;
[DataMember]
public string AdditionalDetails
{
get { return additionalDetails; }
set { additionalDetails = value; }
}
}
// interface method declaration
[OperationContract]
[FaultContract(typeof(FormatFault))]
void DoWork2();
// service method implementation
public void DoWork2()
{
try
{
int i = int.Parse("Abcd");
}
catch (FormatException ex)
{
FormatFault fault = new FormatFault();
fault.AdditionalDetails = ex.Message;
throw new FaultException<FormatFault>(fault);
}
}
// client calling code
private static void InvokeWCF2()
{
ServiceClient service = new ServiceClient();
try
{
service.DoWork2();
}
catch (FaultException<FormatFault> e)
{
// This is a strongly typed try catch instead of the weakly typed where we need to do -- if (e.Code.Name == "Format_Error")
Console.WriteLine("Handling format exception: " + e.Detail.AdditionalDetails);
}
}
нет никакой потребности добавить причину отказа если не требуемый. Просто удостоверьтесь, что атрибут FaultContract корректен
Можно также встретиться с этим исключением, если Вы не указываете FaultContract (typeof (имя класса)) атрибут для метода
Вы могли бы попробовать это в конфигурации сервера (поведения-> serviceBehaviors-> поведение):
<serviceDebug includeExceptionDetailInFaults="true" />
Используя строго типизированный try catch, я смог обойти ошибку «Создатель этой ошибки не указал» причина".
У меня есть код в точности как у Рашми есть, и я получил ошибку "Создатель этой неисправности ....". Это происходило, когда я отлаживал VS2010. Я нашел это сообщение:
, в котором объясняется пара параметров отладки, которые мне нужны для выключать. Проблема решена.
Если вы не хотите получать уведомления о таких исключениях, перейдите в «Отладка» -> «Исключения» и снимите флажок «Не обрабатывается пользователем» для «Исключения среды CLR» или для конкретных исключений.
Я решил эту проблему, используя конструктор с двумя параметрами.
// service method implementation
throw new FaultException<FormatFault>(fault,new FaultReason(fault.CustomFaultMassage));
CustomFaultMassage - это свойство из контракта данных.