我已经开发了一个自托管的asp.net webapi服务,它使用消息处理程序(类似于:http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/)进行基本身份验证。当我在我的工作站(win 7 x64)上运行此命令时,客户端按预期使用。当我在目标服务器(Win2008)上运行它时,客户端失败并返回错误代码500。经过一些挖掘和网络跟踪,看起来(正常工作的) win 7 box最初的响应是401,但win 2008 box根本没有响应,它只是丢弃了连接(客户端报告为500)。
我已经在服务器上设置了远程调试,甚至没有堆栈跟踪可供继续。在我看来,可能是我在服务器上丢失了一些组件,这些组件在asp.net webapi代码中的某个地方导致了异常,但我不能确定。
我不太确定下一步该怎么做。我唯一能想到的下一步就是对它运行procmon,看看它是否为dll提供了任何“file-not-found”类型的条目。
发布于 2013-02-14 07:23:14
我改用每晚构建的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的子类
这样做之后,代码就可以在任何地方运行了。
https://stackoverflow.com/questions/14779902
复制相似问题