У меня есть классический веб-сервис asp.net (asmx) и веб-метод. Мне нужно создать пользовательское исключение для некоторого случая в моем веб-методе, и мне нужно перехватить это конкретное пользовательское исключение, когда я вызываю метод веб-службы.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
public HelloWorldOutput HelloWorld(HelloWorldInput input)
{
try
{
// My Code
return new HelloWorldOutput();
}
catch (Exception ex)
{
throw new HelloWorldException("Hello World Exception", ex);
}
}
}
Классы ввода, вывода и исключения в качестве образца:
public class HelloWorldInput { }
public class HelloWorldOutput { }
[Serializable]
public class HelloWorldException : Exception
{
public HelloWorldException() { }
public HelloWorldException(string message) : base(message) { }
public HelloWorldException(string message, Exception inner)
: base(message, inner) { }
protected HelloWorldException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
На стороне клиента мне нужно:
public static void Main()
{
WebService service = new WebService();
try
{
service.HelloWorld(new HelloWorldInput());
}
catch (HelloWorldException ex)
{
// Do sth with HelloWorldException
}
catch (Exception ex)
{
// Do sth with Exception
}
}
Однако я не могу этого сделать, потому что, когда я добавляю ссылку на веб-сервис на клиенте, у меня есть класс обслуживания, классы ввода и вывода, но у меня нет пользовательского класса исключения.
Также другая проблема заключается в том, что у меня также есть проблемы с сериализацией класса Exception (поскольку свойство Exception.Data реализует интерфейс IDictionary)
Есть ли способ сделать это по-моему, или я совершенно не прав, или я что-то упускаю из-за основ веб-сервисов?
Спасибо.