【问题标题】:Disabling Glimpse for a certain code block禁用某个代码块的 Glimpse
【发布时间】:2016-05-24 09:22:25
【问题描述】:

我在带有 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.Current 为空。 另一方面,邮政使用 Razor 来呈现电子邮件,因此会触发 Glimpse 拦截器。

是否有可能为此特定代码块禁用 Glimpse?

实现自定义IRuntimePolicy 似乎不太可能,因为在这种情况下不会调用它。 this question 中提供的解决方法也不是,因为 System.Web.HttpContext.Current 在 SharePoint 远程事件接收器中为空。 我还尝试使用以下代码将远程事件接收器的 URL 列入黑名单,但 Glimpse 似乎仍然被调用(远程事件接收器位于名为 Services 的目录中):

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

使用defaultRuntimePolicy="Off" 代码有效。

【问题讨论】:

    标签: c# asp.net sharepoint glimpse postal


    【解决方案1】:

    正则表达式运行时策略只是阻止 Glimpse 存储收集的数据,但正如您从调用堆栈中看到的那样,它不会阻止拦截器监视请求。

    您可以通过将其添加到配置的 &lt;glimpse&gt; 节点来禁用它:

    <inspectors>
        <ignoredTypes>
            <add type="Glimpse.Mvc.Inspector.ViewEngineInspector, Glimpse.Mvc3" />
        </ignoredTypes>
    </inspectors>
    

    【讨论】:

    • 谢谢!但我认为这将完全禁用 ViewEngine 检查。我想为整个项目启用它,除了远程事件接收器中的一个代码块。
    • 你是对的。不幸的是,没有办法做到这一点。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多