C# HTTP状态401:从ExtendedPSI调用时未经授权
我目前正在尝试开发一个ExtendedPSI Web服务,它反过来调用许多现有的PSI Web服务。问题是我收到了错误 System.Net.WebException:请求失败,HTTP状态为401:未经授权 当我尝试使用我创建的ExtendedPSI从访问现有PSI服务时 如果我使用以下代码段对ExtendedPSI中的凭据进行硬编码,我可以使服务正常工作:C# HTTP状态401:从ExtendedPSI调用时未经授权,c#,web-services,sap-pi,project-server-2007,C#,Web Services,Sap Pi,Project Server 2007,我目前正在尝试开发一个ExtendedPSI Web服务,它反过来调用许多现有的PSI Web服务。问题是我收到了错误 System.Net.WebException:请求失败,HTTP状态为401:未经授权 当我尝试使用我创建的ExtendedPSI从访问现有PSI服务时 如果我使用以下代码段对ExtendedPSI中的凭据进行硬编码,我可以使服务正常工作: resWS.Credentials = new NetworkCredential("userName", "userPass", "d
resWS.Credentials = new NetworkCredential("userName", "userPass", "domain");
但当我使用:
resWS.Credentials = CredentialCache.DefaultCredentials;
我已尝试CredentialCache.DefaultNetworkCredentials,但通过HTTP或FTP读取此文件无效
我已经阅读了许多文章,其中提出了一些建议,例如启用Windows身份验证和删除匿名访问等。无论是在客户端web.config中还是在调用webapp的虚拟机上,我都在使用SoapUI调用ExtendedPSI服务,因为最终的解决方案将由ESB平台即SAP PI调用
但是使用SoapUI,我通过在SoapUI界面中提供我的登录详细信息,成功地依次调用了ExtendedPSI服务中调用的每个现有PSI服务web服务,因此我知道只要我可以传递凭据,现有服务就可以工作,但当
使用CredentialCache.DefaultCredentials
希望这对某些人来说是有意义的这是我第一次尝试web服务,如果有点模糊,我深表歉意。我真的不想在我的服务中硬编码登录详细信息,所以我希望有人以前遇到过这个问题,并且有一个解决方案我可以使用
我需要的信息是否保存在HttpContext中?我可以传递的加密令牌可能刚刚到达这里:?或者我需要一个普通用户来访问这些现有的PSI web服务
仅供参考:我遵循了这篇文章,我进一步扩展了这篇文章,称之为现有的PSI,但它假设某种类型的MS.NET客户端调用该服务
先谢谢你
问候,,
TartanBono您应该像这样更改应用程序的web.config。只需覆盖绑定节点中的安全节点:
我希望这将有助于:
我还写了一篇博客文章,用于设置与PSI的连接:文档中描述的默认凭据不能使用HTTP或FTP。顺便问一下,正在使用的身份验证方案是什么?您的windows登录详细信息是否与此所需的信息相匹配?嗨,Jon,感谢您抽出时间,它的windows身份验证和详细信息在整个网络中都是一致的。正是这些细节,我硬编码到extendedPSI中,如果我硬编码它们,它工作得很好。我需要传递网络登录详细信息,例如,每个用户只能使用PSI web服务互操作/更新自己的时间表数据。希望这是有道理的。如果没有,很抱歉,但这对我来说是全新的:结核病
<binding name="WssInteropSoap">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
//credential impersonation (just if you changed your binding settings)
projectSvc.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password", "domain");
projectSvc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;