特定のアクションを実行するためのカスタム SharePoint Web サービスがあります。ユーザー資格情報は、Soap ヘッダーを介して渡されます。認証情報は問題なく Web サービスに到達します。
問題: ユーザー資格情報を使用して Web サービスを呼び出していない場合、次のコードは「Unauthorized Error」を返します。
WebService メソッド
[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 サイトにログインすることです。
いくつかのヘルプが役立ちます。これに関する詳細が必要な場合はお知らせください。