我有一个Azure Service Fabric无状态服务,客户端通过ServiceProxy连接到远程服务,我试图捕获客户端服务中引发的异常。在线文档说:
远程处理框架将在服务处抛出的异常传播到 客户端。所以在客户端使用异常处理逻辑 ServiceProxy可以直接处理服务抛出的异常。
但是,我似乎得到的是一个System.Exception,其中包含一些其他错误消息,例如:
类型异常 ' ExceptionServiceCommon.Exceptions.MyCustomException'被扔了。
我正在使用一个严肃的回归实现,以便在更复杂的情况下解决这个问题。
服务代码是:
internal sealed class ExceptionService : StatelessService, IException
{
public ExceptionService(StatelessServiceContext context)
: base(context)
{ }
public Task ThrowException()
{
throw new MyCustomException();
}
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(initParams => this.CreateServiceRemotingListener(initParams))
};
}
}
公共程序集中定义的接口和异常是:
public interface IException : IService
{
Task ThrowException();
}
[Serializable]
public class MyCustomException : Exception
{
public MyCustomException()
{ }
public MyCustomException(string message)
: base(message) { }
public MyCustomException(string message, Exception innerException)
: base(message, innerException)
{ }
protected MyCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
客户端(控制台应用程序)中的代码是:
class Program
{
static void Main(string[] args)
{
var client = ServiceProxy.Create<IException>(new Uri("fabric:/ExceptionApplication/ExceptionService"));
try
{
client.ThrowException().GetAwaiter().GetResult();
}
catch (MyCustomException)
{
Console.WriteLine("My Custom Exception");
}
catch (Exception)
{
Console.WriteLine("Plain old Exception");
}
Console.Read();
}
}
MyCustomException永远不会被捕获,只有Exception。
答案 0 :(得分:0)
您没有在客户端获取异常的原因是它包含在downloader/request_count': 11
crawlera/request/method/GET': 11
httpcache/hit': 11
中。只需确保在try / catch中捕获它,然后handle自定义异常类型。
AggregateException