我有一个从 Web 客户端调用的 ASMX Web 服务(在我的本地主机上 - WinXP IIS 5.1)。我的 web 服务必须使用另一个 ASMX web 服务(在 Win 2003 服务器 IIS 6.0 上)。
当我以“硬编码”方式在我的网络服务代码中提供凭据时:
engineWSE.Credentials = new System.Net.NetworkCredential("myUser", "myPass", "myDomain");
...远程 Web 服务的后续调用工作正常。
现在我试图在一些初步测试中冒充自己。我对此的初步阅读告诉我这可能是一个大主题,但这是我为初学者所做的:
在我的本地主机上的 WebClient 站点的虚拟目录中未选中“匿名访问”
在我的 webclient 站点的 web.config 中,我建立了: authentication mode="Windows" 和 identity impersonate="true"
在必须调用远程服务的 web 服务的 web 方法中,我更改为:
engineWSE.Credentials = System.Net.CredentialCache.DefaultCredentials;
当使用这些 DefaultCredentials 调用远程 Web 服务时,我收到以下错误:
System.Web.Services System.Web.Services.Protocols.SoapException:服务器无法处理请求。--->
System.Net.WebException:请求失败,HTTP 状态为 401:未经授权。
在 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage 消息、WebResponse 响应、流 responseStream、布尔 asyncCall)
在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串方法名,对象 [] 参数)
我不确定我是否误解并试图过度简化“模拟”,或者远程 Web 服务是否以某种方式连接为仅接受带有 3 个参数(即用户名、密码、域)的凭据。