1

ASP.NET MVC アプリケーションを使用して、SharePoint プロバイダーがホストするアドインで Glimpse (1.8.6) を使用しています。ある場所では、SharePoint リモート イベント レシーバーを使用しています。これは、SharePoint から ASP.NET 5 アプリケーションへの呼び出しであり、Postal を使用して電子メールをレンダリングして送信します。

これにより、次のNullReference例外が発生します。

at Glimpse.AspNet.AspNetFrameworkProvider.get_HttpRequestStore()
at Glimpse.Core.Framework.Factory.<>c__DisplayClass5.<InstantiateRuntimePolicyStrategy>b__4()
at Glimpse.Core.Extensions.AlternateMethodContextExtensions.TryProceedWithTimer(IAlternateMethodContext context, TimerResult& timerResult)
at Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context)
at Glimpse.Core.Extensibility.AlternateTypeToCastleInterceptorAdapter.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.IDependencyResolverProxy.GetServices(Type serviceType)
at System.Web.Mvc.DependencyResolverExtensions.GetServices[TService](IDependencyResolver resolver)
at System.Web.Mvc.MultiServiceResolver.GetCombined[TService](IList`1 items, IDependencyResolver resolver)
at System.Web.Mvc.ViewEngineCollection.get_CombinedItems()
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 cacheLocator, Func`2 locator)
at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName)
at Postal.EmailViewRenderer.CreateView(String viewName, ControllerContext controllerContext)
at Postal.EmailViewRenderer.Render(Email email, String viewName)
at Postal.EmailService.CreateMailMessage(Email email)
at Postal.EmailService.Send(Email email)
at CallSite.Target(Closure , CallSite , EmailService , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite site, T0 arg0, T1 arg1)
at MyWebApp.Services.MyRemoteEventReceiver.DoSomething(SPRemoteEventProperties properties) in d:\Repos\MyRemoteEventReceiver.svc.cs:line 331
at SyncInvokeProcessEvent(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)

この要求は、ユーザーのブラウザーからの呼び出しではなく、SharePoint から ASP.NET アプリケーションへの呼び出しによってトリガーされるため、System.Web.HttpContext.Currentnull です。一方、Postal は Razor を使用して電子メールをレンダリングするため、Glimpse インターセプターをトリガーします。

この特定のコード ブロックに対して Glimpse を無効にする可能性はありますか?

この場合は呼び出されないため、カスタムの実装はIRuntimePolicy可能ではないようです。SharePoint リモート イベント レシーバーでは null であるため、この質問で提供される回避策もありません。System.Web.HttpContext.Currentまた、次のコードを使用してリモート イベント レシーバーの URL をブラックリストに登録しようとしましたが、Glimpse がまだ呼び出されているようです (リモート イベント レシーバーは Services というディレクトリにあります)。

<runtimePolicies>
  <uris>
    <add regex=".*\/Services\/.*"/>
  </uris>
</runtimePolicies>

defaultRuntimePolicy="Off"コードで動作します。

4

1 に答える 1

1

正規表現ランタイム ポリシーは、Glimpse が収集したデータを保存するのを止めるだけですが、コール スタックからわかるように、インターセプターがリクエストを監視するのを止めるわけではありません。

<glimpse>これを構成のノードに追加することで無効にできます。

<inspectors>
    <ignoredTypes>
        <add type="Glimpse.Mvc.Inspector.ViewEngineInspector, Glimpse.Mvc3" />
    </ignoredTypes>
</inspectors>
于 2016-05-24T15:42:55.620 に答える