我有一个使用XML Web服务的ASP.NET Web应用程序。 Web应用程序还使用外部(业务)程序集,该程序集也使用相同的XML Web服务。我已经验证两者都使用相同的凭据并指向相同的URL,但来自外部程序集的调用都失败为401:Access Denied。
哦,这只是在我们的QA环境中。我们的开发环境运行得很好。
经过一些额外的诊断后,我发现(仅在QA环境中)我们分配给代理类的凭据在外部程序集的情况下没有被使用。这是实例化我们的Web服务客户端的代码:
var credentials = new NetworkCredential(userName, password, domain);
var webService = new PwrWebService()
{
PreAuthenticate = true,
Credentials = credentials,
CookieContainer = new CookieContainer(),
Url = _url
};
在下一行中,我尝试将webService.Credentials转换为NetworkCredential以验证属性并且转换失败。这告诉我代理没有使用正确的凭据,这就是为什么我在拨打电话时收到401错误的原因。但是,此EXACT代码适用于Web应用程序。 WTH正在进行中???