在ServiceStack中调用RegistrationService.Post时出现NullReferenceException

时间:2013-12-10 17:48:44

标签: servicestack

我通过Service :: ResolveService从另一个ServiceStack服务调用RegistrationService :: Post,但是我收到了以下回复:

  

{     “ResponseStatus”:{       “ErrorCode”:“NullReferenceException”,       “消息”:“对象引用未设置为对象的实例。”,       “StackTrace”:“[AddUser:12/10/2013 5:06:09 PM]:\ n [请求:{电子邮件:john @ aol.com,密码:password1}] \ nSystem.NullReferenceException:对象引用未设置为一个对象的实例。\ r \ n在ServiceStack.ServiceInterface.ServiceExtensions.GetSession(服务服务,布尔重新加载)\ r \ n在ServiceStack.ServiceInterface.Auth.RegistrationService.Post(注册请求)\ r \ n在JostRunning中。 C:\ GitRepositories \ JostRunning \ JostRunning.Services \ ServiceInterface \ BL \ UsersService.cs中的Services.ServiceInterface.BL.UsersService.Post(AddUser请求):lambda_method中的第90行\ r \ n \ n(Closure,Object,Object)\ r \ n \ n在ServiceStack.ServiceHost.ServiceRunner`1.Execute(IRequestContext requestContext,Object instance,TRequest request)“,       “错误”:[]     }   }

看起来Service :: GetSession中存在一个问题,可能是一个null RequestContext,但我不太确定这是怎么回事。如果我将相同的帖子发送到/注册,一切都按预期工作。我不认为在该帖子之上添加传递呼叫会导致异常。

修改 - 我通过已解决的RegistrationService调用GetSession时确认服务上的HttpRequestContext为null。

public static IAuthSession GetSession(this Service service, bool reload = false)
{
    var req = service.RequestContext.Get<IHttpRequest>();
    if (req.GetSessionId() == null)
        service.RequestContext.Get<IHttpResponse>().CreateSessionIds(req);
    return req.GetSession(reload);
}

此外,在另一个“服务调用解析服务”方法中抛出this.GetSession()之后,我得到了相同的NullReferenceException。

是否有一个步骤来初始化在进行已解决的服务调用之前需要采取的请求上下文?

Resolved-ish - 在更多地讨论之后,我猜测,因为我有一个服务调用另一个服务,所以RequestContext没有使用它到正在使用它的RegistrationService。将Service :: RequestContext设置为调用服务的RequestContenxt rior以使解析的服务方法调用已经解决了这个问题(但它肯定是hacky)。

0 个答案:

没有答案