0

我有一个用于执行某些操作的自定义 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 站点。

一些帮助会很有用。如果您需要有关此的更多详细信息,请告诉我。

4

1 回答 1

0

SPSite 构造函数在访问 Sharepoint 时将需要身份验证才能正确初始化。您可以使用您之前构建的凭据以与此处描述的方式类似的方式对其进行实例化

于 2012-10-26T10:49:42.627 回答