0

我开发了一个自托管的 asp.net webapi 服务,它使用消息处理程序使用基本身份验证(类似于:http ://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using -消息处理程序/)。当我从我的工作站(win 7 x64)运行它时,客户端会按预期使用。当我在预期的服务器(win 2008)上运行它时,客户端失败并显示错误代码 500。经过一些挖掘和网络跟踪后,看起来(工作的)win 7 框最初按预期响应 401,但 win 2008 框根本没有响应,它只是断开连接(客户端将此报告为 500)。

我已经在服务器上设置了一个远程调试,甚至没有一个堆栈跟踪可以继续。在我看来,我可能在服务器上缺少某些组件,导致 asp.net webapi 代码深处某处出现异常,但我无法确定。

我不太确定从这里去哪里。我能想到的唯一下一步是对它运行 procmon 并查看它是否为 dll 提供任何“未找到文件”类型的条目。

4

1 回答 1

0

我切换到使用 asp.net web 堆栈每晚构建,以便我可以获得更好的符号信息(http://blogs.msdn.com/b/henrikn/archive/2012/04/29/using-nightly-nuget-packages -with-asp-net-web-stack.aspx)。有了它,并打开 .net 框架调试,我能够捕获正在引发的实际异常:

'WWW-Authenticate' 标头不能直接修改

谷歌搜索,我发现了几条线索,其中一条导致了http://wcf.codeplex.com/discussions/287534我得到了解决方案。基本上,切换到在身份验证模块中使用身份验证,而不是在消息处理中使用。所以更像这样:

HttpSelfHostConfiguration config = new HttpSelfHostConfiguration("http://0.0.0.0:" + FaxCommon.SERVICE_PORT.ToString());
config.UserNamePasswordValidator = new AuthenticationProvider();

其中 AuthenticationProvider 是 UserNamePasswordValidator 的子类

之后,代码在任何地方都可以使用。

于 2013-02-13T23:23:14.140 回答