这是我的第一个S.O.发布,因此请宽恕任何违反礼节的行为,并感谢大家的帮助。
我正在使用RESTful WCF EntityFrameworkDataService,实现IDataServiceEntityFrameworkworkProvider,并使用OData协议将数据库公开给客户端。
我的大部分经验是使用ASP.Net Web Forms应用程序,该应用程序具有带有Application_Error事件的Global.asax文件,该文件提供了插入SQL Server数据库中的有意义的错误信息。 (堆栈跟踪等)我想在数据服务中执行相同的操作,但是没有Global.asax文件。如何在此WCF数据服务中处理此事件(或等效事件)?
需求-我正在尝试帮助创建了使用数据服务的客户端应用程序的开发人员,他遇到了问题并报告了该服务,从而为他提供了来自数据服务的最小反馈。没有错误日志很难帮助他。
我意识到他遇到的许多(如果不是全部)问题可能不是应用程序异常,但是为了覆盖我的基础,我想至少捕获数据服务的应用程序异常,
在服务InitializeService事件中,我已将配置对象的UseVerboseErrors属性设置为“ true”,但这似乎是在提供客户端信息而不是我。
'This is my data service class, (DataService.svc,) with authentication removed, and other non-demonstrative methods.
Imports System
Imports System.Data.SqlClient
Imports System.Collections.Generic
Imports System.Data.Services
Imports System.Data.Services.Common
Imports System.Data.Services.Providers
Imports System.ServiceModel.Web
Imports System.Web
Imports System.Text
Imports System.Security.Principal
Imports Newtonsoft
Imports System.Data
Imports System.Data.Entity.Core
Imports System.Linq
<System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults:=True,
[Namespace]:="http://example.com/")>
<RM_API.JSONPSupportBehavior>
Partial Public Class DataService
Inherits EntityFrameworkDataService(Of rmrsEntities)
Implements IDataServiceEntityFrameworkProvider
Public ReadOnly Property EdmSchemaVersion As MetadataEdmSchemaVersion Implements IDataServiceEntityFrameworkProvider.EdmSchemaVersion
Get
Return MetadataEdmSchemaVersion.Version3Dot0
End Get
End Property
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
'Configuration.
config.SetEntitySetAccessRule("*", EntitySetRights.All)
config.DataServiceBehavior.AcceptAnyAllRequests = True
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All)
config.SetServiceActionAccessRule("*", ServiceActionRights.Invoke)
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3
config.DataServiceBehavior.AcceptProjectionRequests = True
config.DataServiceBehavior.AcceptCountRequests = True
'config.AnnotationsBuilder = CreateAnnotationsBuilder(Function() serviceContext)
config.DataServiceBehavior.AcceptReplaceFunctionInQuery = True
config.DataServiceBehavior.AcceptSpatialLiteralsInQuery = True
config.DisableValidationOnMetadataWrite = True
config.UseVerboseErrors = True
End Sub
Protected Overrides Sub OnStartProcessingRequest(ByVal args As ProcessRequestArgs)
'*** I do authentication here ***
MyBase.OnStartProcessingRequest(args)
End Sub
End Class