“Создатель этого отказа не указывал Причину” Исключение

52
задан Michael Kniskern 14 November 2013 в 04:10
поделиться

8 ответов

После некоторого 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"));
}
44
ответ дан Michael Kniskern 7 November 2019 в 09:28
поделиться
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 корректен

8
ответ дан Coral Doe 7 November 2019 в 09:28
поделиться

Можно также встретиться с этим исключением, если Вы не указываете FaultContract (typeof (имя класса)) атрибут для метода

2
ответ дан Rashmi Pandit 7 November 2019 в 09:28
поделиться

Вы могли бы попробовать это в конфигурации сервера (поведения-> serviceBehaviors-> поведение):

<serviceDebug includeExceptionDetailInFaults="true" />
0
ответ дан Chris Porter 7 November 2019 в 09:28
поделиться

Используя строго типизированный try catch, я смог обойти ошибку «Создатель этой ошибки не указал» причина".

0
ответ дан 7 November 2019 в 09:28
поделиться

У меня есть код в точности как у Рашми есть, и я получил ошибку "Создатель этой неисправности ....". Это происходило, когда я отлаживал VS2010. Я нашел это сообщение:

http://sergecalderara.wordpress.com/2008/11/25/systemservicemodelfaultexception1-was-unhandled-by-user-code/

, в котором объясняется пара параметров отладки, которые мне нужны для выключать. Проблема решена.

1
ответ дан 7 November 2019 в 09:28
поделиться

Если вы не хотите получать уведомления о таких исключениях, перейдите в «Отладка» -> «Исключения» и снимите флажок «Не обрабатывается пользователем» для «Исключения среды CLR» или для конкретных исключений.

2
ответ дан 7 November 2019 в 09:28
поделиться

Я решил эту проблему, используя конструктор с двумя параметрами.

// service method implementation

 throw new FaultException<FormatFault>(fault,new FaultReason(fault.CustomFaultMassage)); 

CustomFaultMassage - это свойство из контракта данных.

5
ответ дан 7 November 2019 в 09:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: