Исключение и отражение - PullRequest
       4

Исключение и отражение

1 голос
/ 28 сентября 2010

Веб-сервис имеет SoapExtension, который содержит обработчик ошибок и сериализацию ошибок в формате xml.

<? Xml version = "1.0" encoding = "utf-8" standalone = "yes"?>
<Exception Type="System.NullReferenceException"> Exception text. </ Exception>

Как сделать обработчик ошибок, который вызывает ошибку типа "Тип"? E.g.:

Type _type = Type.GetType(doc.DocumentElement.Attributes["Type"].Value);

Это должно вызвать NullReferenceException.

Ответы [ 2 ]

5 голосов
/ 28 сентября 2010

Необходимо указать полное имя, т. Е. «System.NullReferenceException».

В данном конкретном случае этого достаточно - потому что NullReferenceException в mscorlib. Однако, если вам нужны другие исключения - такие как ConstraintException, который находится в сборке System.Data, - вам также необходимо указать полное имя сборки. Type.GetType(string) ищет только в текущей исполняемой сборке и mscorlib имена типов, которые не указывают сборку.

РЕДАКТИРОВАТЬ: Вот короткая, но полная программа, которая работает:

using System;
using System.Reflection;

class Test
{
    static void Main()
    {
        string typeName = "System.NullReferenceException";
        string message = "This is a message";
        Type type = Type.GetType(typeName);
        ConstructorInfo ctor = type.GetConstructor(new[] { typeof(string) });
        object exception = ctor.Invoke(new object[] { message });
        Console.WriteLine(exception);
    }
}
0 голосов
/ 28 сентября 2010

Я использую такой код:

public static Exception Invoke(string soapMessage) {
    //...            
    string _message = doc.DocumentElement.InnerText;
    Type_type = Type.GetType(doc.DocumentElement.Attributes["Type"].Value);
    ConstructorInfo constructor = _type.GetConstructor(new[] {typeof (string), _type.GetType()});
    try {
        Exception ctor = (Exception)constructor.Invoke(new object[] { _message, _type });
    } catch (Exception ex) {
        return ex;
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...