2017-06-26 4 views
1

servicestackサービスで動作しているリクエストログのカスタムカスタムクォーテーションを取得するのに苦労しています。ServiceStack - Autoquery Request logs issue

私はVS2017を使用しており、ServiceStack ASP.NETの空のテンプレートを使用して新しいソリューションを作成しています。次に、http://docs.servicestack.net/autoquery-service#view-request-logs-in-autoquery-viewerhttpsgithubcomservicestackadminの例のコードをいくつか追加しました。つまり、QueryRequestLogs、CustomAutoQueryDataServices、およびTodayLogsというクラスです。私のホストは -

//VS.NET Template Info: https://servicestack.net/vs-templates/EmptyAspNet 
public class AppHost : AppHostBase 
{ 
    /// <summary> 
    /// Base constructor requires a Name and Assembly where web service implementation is located 
    /// </summary> 
    public AppHost() 
     : base("Autoquery", typeof(MyServices).Assembly) { } 

    /// <summary> 
    /// Application specific configuration 
    /// This method should initialize any IoC resources utilized by your web service classes. 
    /// </summary> 
    public override void Configure(Container container) 
    { 

     Plugins.Add(new RequestLogsFeature 
     { 
      RequestLogger = new CsvRequestLogger(
    files: new FileSystemVirtualPathProvider(this, Config.WebHostPhysicalPath), 
    requestLogsPattern: "requestlogs/{year}-{month}/{year}-{month}-{day}.csv", 
    errorLogsPattern: "requestlogs/{year}-{month}/{year}-{month}-{day}-errors.csv", 
    appendEvery: TimeSpan.FromSeconds(1) 
), 
      EnableResponseTracking = true 
     }); 

     Plugins.Add(new AutoQueryFeature { MaxLimit = 100 }); 
     Plugins.Add(new AdminFeature()); 
    } 
} 

私はちょうどリクエストログに何かがあることを確認するためにいくつかの呼び出しを行いました。次に、メタデータページのリンクを使用してオートクエリビューアに移動します。左から試してみる検索オプションのうち「オブジェクトのインスタンスに設定されていないオブジェクト参照」が表示されます。

at Autoquery.ServiceInterface.CustomAutoQueryDataServices.Any(QueryRequestLogs query) in C:\Repos\test\Autoquery\Autoquery\Autoquery.ServiceInterface\CustomAutoQueryDataServices.cs:line 32 
at ServiceStack.Host.ServiceRunner`1.Execute(IRequest request, Object instance, TRequest requestDto) 
at ServiceStack.Host.ServiceExec`1.Execute(IRequest request, Object instance, Object requestDto, String requestName) 
at ServiceStack.Host.ServiceRequestExec`2.Execute(IRequest requestContext, Object instance, Object request) 
at ServiceStack.Host.ServiceController.ManagedServiceExec(ServiceExecFn serviceExec, IService service, IRequest request, Object requestDto) 
at ServiceStack.Host.ServiceController.<>c__DisplayClass36_0.<RegisterServiceExecutor>b__0(IRequest req, Object dto) 
at ServiceStack.Host.ServiceController.Execute(Object requestDto, IRequest req) 
at ServiceStack.HostContext.ExecuteService(Object request, IRequest httpReq) 
at ServiceStack.Host.RestHandler.GetResponse(IRequest request, Object requestDto) 
at ServiceStack.Host.RestHandler.<>c__DisplayClass13_1.<ProcessRequestAsync>b__0(Task t) 
at ServiceStack.AsyncExtensions.Continue[TOut](Task task, Func`2 next) 
at ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes, String operationName) 
at ServiceStack.Host.Handlers.HttpAsyncTaskHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error) 
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) 
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus) 
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 

私は、ログのそれぞれをデバッグする場合、クエリとリクエストパラメータは、完全なスタックトレースがある

public class CustomAutoQueryDataServices : Service 
{ 
    public IAutoQueryData AutoQuery { get; set; } 

    public object Any(QueryRequestLogs query) 
    { 
     var date = query.Date.GetValueOrDefault(DateTime.UtcNow); 
     var logSuffix = query.ViewErrors ? "-errors" : ""; 
     var csvLogsFile = VirtualFileSources.GetFile(
      "requestlogs/{0}-{1}/{0}-{1}-{2}{3}.csv".Fmt(
       date.Year.ToString("0000"), 
       date.Month.ToString("00"), 
       date.Day.ToString("00"), 
       logSuffix)); 

     if (csvLogsFile == null) 
      throw HttpError.NotFound("No logs found on " + date.ToShortDateString()); 

     var logs = csvLogsFile.ReadAllText().FromCsv<List<RequestLogEntry>>(); 
     try 
     { 
      var q = AutoQuery.CreateQuery(query, Request, 
       db: new MemoryDataSource<RequestLogEntry>(logs, query, Request)); 
      return AutoQuery.Execute(query, q); 
     } 
     catch (Exception ex) 
     { 
      return ex; 
     } 

    } 

var q = AutoQuery.CreateQuery(query, Request, 
    db: new MemoryDataSource<RequestLogEntry>(logs, query, Request)); 

ラインから来ているSystem.NullReferenceException nullではありません。

私はどこかでシンプルなものを見逃していたと思っていますが、私は何が分かりませんか、これをさらにデバッグする方法を知ることはできません。 AutoQuery依存関係がヌルであるため、

+0

完全なStackTraceを投稿してください。 – mythz

+0

C:\ Repos \ testのAutoquery.ServiceInterface.CustomAutoQueryDataServices.Any(QueryRequestLogsクエリ)のServiceStack.AutoQueryDataExtensions.CreateQuery [IAutoQueryData autoQuery、IQueryData'1モデル、IRequest要求、IQueryDataSource db] からのスタックトレースです。 \ Autoquery \ Autoquery \ Autoquery.ServiceInterface \ CustomAutoQueryDataServices.cs:行28 ServiceStack.Host.ServiceRunner'1.Execute(IRequestリクエスト、オブジェクトインスタンス、TRequest requestDto) – steve

+0

スタックトレースまたはコメントのコードを投稿しないでください。追加情報を追加するためにあなたの質問を更新してください。 ** Full StackTrace **で質問を更新してください。 – mythz

答えて

1

NullReferenceExceptionは次のようになります。その代わりAUTOQUERYデータ特徴の

Plugins.Add(new AutoQueryFeature { MaxLimit = 100 }); 

だけ AutoQuery RDBMS機能を輸入してきたので、

public IAutoQueryData AutoQuery { get; set; } 

それはnullです

Plugins.Add(new AutoQueryDataFeature { MaxLimit = 100 }); 

(RDBMS以外の)AutoQuery Data Sourcesのいずれかを使用する場合に必要です。

+1

Mythzあなたはスターです。多くの時間と忍耐ありがとう – steve

関連する問題