我有一个用于执行某些操作的自定义 SharePoint 网络服务。用户凭据通过 Soap Header 传递。凭据可以毫无问题地到达 Web 服务。
问题: 如果我没有使用用户凭据进行 Web 服务调用,以下代码将返回“未经授权的错误”。
网络服务方法
[WebMethod(Description = "Test Credentials")]
[SoapDocumentMethod(Binding = "SPService")]
[SoapHeader("Authen")]
public string[] TestCredentials(string siteURL)
{
string[] credentials = new string[3];
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb spW = site.OpenWeb())
{
credentials[0] = Authen.CallingUserName;
credentials[1] = Authen.CallingUserPwd;
credentials[2] = siteURL;
}
}
return credentials;
}
客户代码
SPService.SPService spS = new SPService.SPService();//Webservice class
SPService.UserAuth ua = new SPService.UserAuth(); //Soap Header class
ua.CallingUserName = UserName; // User name
ua.CallingUserPwd = Password; // Password for the Username
spS.UserAuthValue = ua; // assigning the credential to the SoapHeader.
//System.Net.NetworkCredential nc = new NetworkCredential(UName, pwd, Domain);
//spS.Credentials = new NetworkCredential(UName, pwd, Domain);
string[] str = new string[3];
str = spS.TestCredentials(txt_URL.Text,"Shared Documents");
当网络凭据被注释掉时,我得到了The request failed with HTTP status 401: Unauthorized.
错误。如果使用凭据,则 Web 服务返回预期值。
自定义 Web 服务的要求是使用 WS-Security 传递登录凭据并使用该凭据登录到 SharePoint 站点。
一些帮助会很有用。如果您需要有关此的更多详细信息,请告诉我。