私は、_layoutsディレクトリ下の自分のsharepointボックスとそのSOAPサービスを使用するシッククライアントでSOAP Webサービスを実行しています。基本認証を使用する1つのSharepointボックスと、クライアント証明書を使用するもう1つのSharepointボックスがあります。ドキュメントライブラリ内のいくつかのリストアイテムを更新するにはSOAPサービスが必要です。私が持っている問題は、昇格された特権ブロック内で実行しない限り、何も動作していないようです。ここで私がしようとしていることのコードスニペットです。SharePoint上で実行されているSOAP Webサービス
using (SPSite site = new SPSite(fileUrl))
using (SPWeb web = site.OpenWeb()) {
// web.CurrentUser is always null unless in elevated privileges block.
// do something with document library...
web.Files.Add(...); // fails with access denied unless in elevated privileges block.
}
私はまた、「SPContext.Current.Web」を試してみましたが、それは私が昇格した権限にいる場合でも、「web.CurrentUser」にnullを返しますブロック。
私は実際には昇格された特権ブロックを使用できません。なぜなら、ユーザーはSOAPサービスの接触にシステムによって変更されたものがあると不平を言うからです。私たちは、次のようなコードを使用しているシッククライアントから
...
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestString);
if(basicAuth) {
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
}
else {
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 certificate in store.Certificates) {
request.ClientCertificates.Add(certificate);
}
request.GetResponse();
我々は手動で様々な理由のためにSOAPリクエストを構築しています。
WebサービスのWebアプリケーションIDアカウントのセキュリティについて詳しく説明できますか? – Nat
質問を更新しました。 – joegtp
リストの操作にビルトインのSharePoint Webサービスを使用できますか? – Zach