Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET 3.5的IIS 7.5中RESTful WCF服务中的错误处理_C#_.net_Wcf_Iis - Fatal编程技术网

C# 使用.NET 3.5的IIS 7.5中RESTful WCF服务中的错误处理

C# 使用.NET 3.5的IIS 7.5中RESTful WCF服务中的错误处理,c#,.net,wcf,iis,C#,.net,Wcf,Iis,我有一个REST WCF web服务.NET3.5,没有使用REST初学者工具包,我想为其创建一个自定义错误处理程序。它通过IIS 7.5在web应用程序中作为.svc文件运行。编辑:可能也值得一提;它是通过HTTPS运行的 .svc.cs文件中的主服务类: [服务合同] [AspNetCompatibilityRequirementsRequirementsMode=AspNetCompatibilityRequirementsMode.Allowed] [ServiceBehaviorIns

我有一个REST WCF web服务.NET3.5,没有使用REST初学者工具包,我想为其创建一个自定义错误处理程序。它通过IIS 7.5在web应用程序中作为.svc文件运行。编辑:可能也值得一提;它是通过HTTPS运行的

.svc.cs文件中的主服务类:

[服务合同] [AspNetCompatibilityRequirementsRequirementsMode=AspNetCompatibilityRequirementsMode.Allowed] [ServiceBehaviorInstanceContextMode=InstanceContextMode.PerCall] 公务舱服务 { [WebGetUriTemplate=/units/{id},ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json,OperationContract] 公共单元GetUnitstring id{ ... } ... } web.config:

我试图创建一个IErrorHandler类,并试图通过web.config使用它,但未能触发它。还尝试通过IHttpModule错误处理程序捕获错误,但这也不会触发错误。目前,我正在手动捕获每个WebGet/WebInvoke中的错误,但这不会捕获序列化错误或未处理的URI等,更不用说它会给代码添加不必要的混乱

我知道我显然遗漏了一些东西,但我遇到的答案似乎不适用于我的配置。有什么建议吗

谢谢

编辑: 刚刚尝试使用自定义WebServiceHostFactory应用自定义WebHttpBehavior。factory和behavior都在运行,并且错误处理程序正在精细创建-HandleError和ProviderDefault从未被调用:

公共类ServiceFactory:WebServiceHostFactory { 公共覆盖ServiceHostBase CreateServiceHoststring构造函数字符串,Uri[]基地址 { ServiceHost主机=CreateServiceHosttypeofService,基本地址; host.Description.Endpoints[0].Behaviors.Addnew ServiceBehavior; 返回主机; } 受保护的重写ServiceHost CreateServiceHostType serviceType,Uri[]基本地址 { 返回base.CreateServiceHostserviceType,baseAddresses; } } 公共类ServiceBehavior:WebHttpBehavior { 受保护的覆盖无效AddServerErrorHandlersServiceEndpoint端点,EndpointDispatcher EndpointDispatcher { endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear; endpointDispatcher.ChannelDispatcher.ErrorHandler.Addnew ServiceErrorHandler; } } 公共类ServiceErrorHandler:IErrorHandler { public bool HandleErrorException错误 { 返回true; } public void ProvideFaultException错误,System.ServiceModel.Channels.MessageVersion,ref System.ServiceModel.Channels.Message错误 { 抛出新的NotImplementedException; } }
解决了。我需要创建一个自定义ServiceHost,并在该ServiceHost的OnOpen方法中添加错误处理程序。还必须从我的web.config中删除该服务

公共类ServiceFactory:WebServiceHostFactory { 受保护的重写ServiceHost CreateServiceHostType serviceType,Uri[]基本地址 { ServiceHost主机=新的RestServiceHosttypeofService,基本地址; host.AddServiceEndpointserviceType,新WebHttpBinding,基地址[0]; 返回主机; } } 公共类RestServiceHost:WebServiceHost { 公共RestServiceHost:base{} public RestServiceHostType serviceType,参数Uri[]baseAddresses:baseserviceType,baseAddresses{} 打开时受保护的覆盖无效 { 基地开放; base.Description.Endpoints中的foreach var端点 { 如果endpoint.Behaviors.Find==null { endpoint.Behaviors.Addnew ServiceBehavior; } } } } 公共类ServiceBehavior:WebHttpBehavior { 受保护的覆盖无效AddServerErrorHandlersServiceEndpoint端点,EndpointDispatcher EndpointDispatcher { endpointDispatcher.ChannelDispatcher.ErrorHandlers.Clear; endpointDispatcher.ChannelDispatcher.ErrorHandler.Addnew ServiceErrorHandler; } } 公共类ServiceErrorHandler:IErrorHandler { public bool HandleErrorException错误 { 返回true; } public void ProvideFaultException错误,System.ServiceModel.Channels.MessageVersion,ref System.ServiceModel.Channels.Message错误 { Utils.HandleExceptionerror,true; } } 可能重复?