我目前尝试在 wpf 客户端上进行干净的 wcf 数据服务异常处理。我有一个带有 ef4 模型和 sql 数据库以及 wpf4 客户端的简单数据服务。
我已经阅读了一些关于 wcf 数据服务异常处理的文章,并提出了一个解决方案,我可以解析收到的异常消息,该消息是格式良好的 xml。
文章: ADO.NET 数据服务:跨应用程序层的高效错误处理
问题是,我的DataServiceQueryException
的消息包含浏览器中错误页面的 HTML 而不是 XML。所以解析器无法解析 XDocument 并简单地返回原始异常
在服务器端我抛出
throw new DataServiceException(
(int)HttpStatusCode.Unauthorized,
ExceptionMessages.ErrorAuthCommon);
哪里错了?
提前致谢
编辑
以下是一些代码片段
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyDataService : DataService<MyEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
异常被抛出CustomAuthProvider.Authenticate(application.Context)
public class BasicAuthenticationModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest
+= new EventHandler(context_AuthenticateRequest);
}
void context_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
if (!CustomAuthProvider.Authenticate(application.Context))
{
application.Context.Response.Status = "401 Unauthorized";
application.Context.Response.StatusCode = 401;
application.Context.Response.AddHeader("WWW-Authenticate", "Basic");
application.CompleteRequest();
}
}
public void Dispose() { }
}
在这里我注册我的IHttpModule
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="CustomAuthenticationModule" type="DataService.BasicAuthenticationModule">
</modules>
</system.webServer