CSharp - 试图解析服务或者它的中一个为 of dependancies的ServiceStack错误

  显示原文与译文双语对照的内容
0 0

我正在使用 servicestack,但在自动布线方面存在问题。

尝试解析服务'{Service}'或者它的插件依赖项时出错( 有关详细信息,请参见内部异常)

我不需要帮助找出问题到底是怎样的。 我真正想要的是一种方法来查看内部异常。 内部异常应该告诉我除了不需要解决的问题,但它不显示在返回的异常中或者日志中。

设置DebugMode也没有帮助,它只包含最上面异常的堆栈跟踪。

所以基本上,我如何阻止servicestack隐藏内部异常细节?

时间: 原作者:

0 0

ServiceStack应该已经返回内部异常,这里的换句话说,是错误的源:


private Exception CreateResolveException<TService>(Exception ex)
{
 var errMsg ="Error trying to resolve Service '{0}' or one of its autowired dependencies (see inner exception for details).".Fmt(typeof(TService).FullName);
 return new Exception(errMsg, ex);
}

基本上,IOC配置存在问题,其中一个依赖项导致了错误。

你可以更改ServiceStack以使用以下方法序列化内部异常:


SetConfig(new EndpointHostConfig {
 ReturnsInnerException = true,
});

但这已经默认为 true 。

所以该异常应该包含内部异常,你是否引用了被序列化的异常或者代码中抛出的异常?

原作者:
0 0

我遇到同样的问题,结果是在我为特定端点类创建的构造函数中引发了异常。 示例。


public class PartnerService : Service
{

 private PartnerManagementService _partnerManagementService;

 public PartnerService()
 {
 var configuration = new Configuration();
 _partnerManagementService = new PartnerManagementService(configuration);
 }

 public object Get(PartnerGet partner)
 {

 try
 {
 var partners = _partnerManagementService.getPartners();

 if (!partners.Any())
 {
 return new HttpError(HttpStatusCode.NotFound,"Partners Could not be found");
 }

 return partners;
 }
 catch (Exception e)
 {

 return new HttpError(HttpStatusCode.InternalServerError, e);
 }
 }

如果发生异常,则在构造函数中引发异常,ServiceStack将无法解析服务或者它的依赖项。

如果在类的构造函数中放置一个 try/catch,那么可以得到一个实际意义上的异常。

原作者:
0 0

我有同样的例外。

在我的例子中,一旦迁移到 ServiceStack v4. 使用 v3,所有工作完美。

IoC配置


public class AppHost : AppHostBase
{
 public AppHost() : base("Northwind web services", typeof(CustomersService).Assembly)
 { } 


 public override void Configure( Container container )
 {
 SetConfig(new HostConfig
 {
 DebugMode = true,
 ReturnsInnerException = true,
 }); 

 var dbFactory = new OrmLiteConnectionFactory("~/Northwind.sqlite".MapHostAbsolutePath(), SqliteDialect.Provider);

 container.Register(dbFactory);

//Dependencies
 container.RegisterAs<CustomerEntityRepository, ICustomerEntityRepository>();

 container.RegisterAutoWired<CustomersService>();

 }
}

基类


public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : IEntity, new()
{ 

 protected IDbConnectionFactory dbFactory { get; set; }

 public Repository( IDbConnectionFactory factory )
 {
 dbFactory = factory;
 }
}

继承的类


public class CustomerEntityRepository : Repository<CustomerEntity>, ICustomerEntityRepository
 {
 public CustomerEntityRepository( IDbConnectionFactory dbFactory )
 : base(dbFactory)
 {
 }
 }
}

我发现的唯一解决方案是:


container.RegisterAs<ICustomerEntityRepository>(c => new CustomerEntityRepository(dbFactury));

下面是完整的异常消息返回 http://pastebin.com/jJntNN5p

...