我开发了一个自托管的asp.net webapi服务,该服务使用消息处理程序进行基本身份验证(类似于:http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/)。当我从我的工作站运行(win 7 x64)时,客户端会按预期消耗。当我在预期的服务器上运行它(win 2008)时,客户端失败,错误代码为500.经过一些挖掘和网络跟踪,看起来(工作)win 7框最初响应401,如预期,但胜利2008年的盒子根本没有响应,它只是丢弃连接(客户端报告为500)。
我在服务器上设置了远程调试,甚至没有堆栈轨道可以继续。在我看来,我可能在服务器上遗漏了一些在asp.net webapi代码深处导致异常的组件,但我无法确定。
我不太确定从哪里开始。我能想到的唯一下一步就是对它运行procmon,看看它是否为dll提供了任何'file-not-found'类型的条目。
答案 0 :(得分:0)
我转而使用asp.net web stack每晚构建,以便我可以获得更好的符号信息(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的子类
执行此操作后,代码无处不在。