【问题标题】:Health Monitoring and WCF运行状况监控和 WCF
【发布时间】:2012-02-17 14:36:22
【问题描述】:

我想使用运行状况监控来记录我在自己的错误处理程序中捕获的未处理异常:

public class MyErrorHandler : IErrorHandler, IServiceBehavior { #region IServiceBehavior Members public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection endpoints, BindingParameterCollection bindingParameters) { } public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) { IErrorHandler errorHandler = new VirusInfoErrorHandler(); foreach (ChannelDispatcherBase channelDispatcherBase in serviceHostBase.ChannelDispatchers) { ChannelDispatcher channelDispatcher = channelDispatcherBase as ChannelDispatcher; if (channelDispatcher != null) { channelDispatcher.ErrorHandlers.Add(errorHandler); } } } public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase) { } #endregion #region IErrorHandler Members public bool HandleError(Exception ex) { MyErrorEvent l_errEvt = new MyErrorEvent("Oh Noes!", this, WebEventCodes.WebExtendedBase + 2, ex); // Always throws a "Value does not fall within the expected range" ArgumentException. l_errEvt.Raise(); return true; } public void ProvideFault(Exception error, MessageVersion version, ref Message fault) { } #endregion }

我目前正在使用一个非常简单的自定义 WebRequestErrorEvent:

public MyErrorEvent(string message, object eventSource, int eventCode, Exception exception) : base(message, eventSource, WebEventCodes.WebExtendedBase + eventCode, exception) { } public override void FormatCustomEventDetails(WebEventFormatter formatter) { if (formatter == null) { throw new ArgumentNullException("formatter", "Please supply a valid formatter object."); } try { base.FormatCustomEventDetails(formatter); formatter.AppendLine("this was a bad error"); } catch (Exception ex) { } }

异常的堆栈跟踪是:

at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal(String name) at System.Web.HttpRequest.get_UrlInternal() at System.Web.Management.WebRequestInformation..ctor() at System.Web.Management.WebRequestErrorEvent.PreProcessEventInit() at System.Web.Management.WebBaseEvent.RaiseInternal(WebBaseEvent eventRaised, ArrayList firingRuleInfos, Int32 index0, Int32 index1) at System.Web.Management.WebBaseEvent.Raise(WebBaseEvent eventRaised) at System.Web.Management.WebBaseEvent.Raise() at ACME.MyErrorHandler.HandleError(Exception ex) in G:\Code\MySvc\Lib\ACME.ErrorHandler\MyErrorHandler.cs:line 78 at System.ServiceModel.Dispatcher.ErrorBehavior.HandleErrorCommon(Exception error, ErrorHandlerFaultInfo& faultInfo)

WebRequestErrorEvent 不能与 WCF 一起使用吗?我可以毫无问题地引发 WebRequestEvents,但不能引发 WebRequestErrorEvents。

【问题讨论】:

  • 您对插入 IIS 的 Windows Server AppFabric 之类的东西持开放态度吗?对于 WCF 和 WF 服务来说,这是一个了不起的监控服务。如果您对此持开放态度,我会发布包含更多信息的答案。
  • 我绝对对 AppFabric 感兴趣。我目前在 Windows Server 2008 R2 上的 IIS7.5 中托管它,但我需要了解更多关于在 AppFabric 中托管它的信息(我确实安装了它,但据我所知:))。

标签: .net wcf health-monitoring


【解决方案1】:

好的,因为我可能有些多余的说明让 AppFabric 在您的情况下工作,所以我将发布一些有用的链接。

您需要做的第一件事是在 Windows 程序下的 AppServer Fabric 配置应用程序中配置监控数据库。

设置:在@RonJacobs 的这个链接中——爱那个人,感谢 Ron 所做的一切——他提供了一些关于在 IIS 中设置所有内容的详细信息。对您来说最有趣的部分将是启用端到端跟踪 - http://blogs.msdn.com/b/rjacobs/archive/2010/06/09/tracking-wcf-data-services-with-windows-server-appfabric.aspx

疑难解答:在此链接中,一旦您开始运行它,就会有一些很好的疑难解答信息 - http://www.lhotka.net/weblog/WindowsServerAppFabricAndWCFMonitoring.aspx

如果您遇到任何问题,请告诉我,我会尽我所能提供帮助!

【讨论】:

  • 感谢您的信息!我无法找到的一件事是设置报告数据库的过程。理想情况下,我希望将数据库托管在与托管 Web 服务的计算机不同的计算机上。例如,如果我的 Web 服务器上已经安装了 AppFabric,我是否可以简单地在我的 web.config 中提供一个连接字符串到报告数据库服务器(并且数据库服务器是否也需要完整的 AppFabric 安装)?
  • @Bullines 简而言之,数据库可以在任何可用的 SQL 服务器上,而 AppFabric 只需安装在 IIS 服务器上。您是否在查找 AppFabric 配置向导时遇到问题?这是一个浏览该 [link]nagarro.com/blog/windows-server-appfabric. 的链接
  • 从外观上看,我必须重新安装 AppFabric 才能再次进入配置向导?
  • 这是可能的 - 作为一个仅供参考,我总是通过从 Web 平台安装程序下载它来安装它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多