我有一个经典的asp.net web服务(asmx),其中包含一个Web方法。在我的Web方法中,我需要针对某些情况抛出自定义异常,并且我需要在调用web服务方法时捕获该特定的自定义异常。
[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
}
}
然而,我无法这样做,因为当我在客户端添加Web服务引用时,我有了服务类、输入和输出类,但是没有自定义异常类。
另一个问题是,由于异常的Data属性实现了IDictionary接口,我也有序列化异常类的问题。
是否有一种方法可以按照我的方式解决这个问题,或者我完全错了,或者我在Web服务的基本原理方面漏掉了一些内容?
谢谢。