2 つの列のリストの名前を指定して、sharepoint サイトに新しいリストを作成する Web サービスを作成しようとしていました。ソリューションをビルドするとエラーは発生しませんが、クライアント プログラム経由で使用しようとすると、次の例外が発生します。
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {BDEADF26-C265-11D0-BCED-00A0C90AB50F} failed due to the following error: 80040154.
at Microsoft.SharePoint.Library.SPRequest..ctor()
at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(SPSite site, String name, Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)
at Microsoft.SharePoint.SPRequestManager.GetContextRequest(SPRequestAuthenticationMode authenticationMode)
at Microsoft.SharePoint.Administration.SPFarm.get_RequestAny()
at Microsoft.SharePoint.SPSecurity.GetCurrentUserTokenNoApplicationPrincipalDelegated()
at Microsoft.SharePoint.SPSecurity.GetCurrentUserToken()
at Microsoft.SharePoint.SPSecurity.EnsureOriginatingUserToken()
at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
at CreaListaDatoNome.Service1.CreaLista(String nomeLista, String field1, String field2) in C:\Users\Administrator\documents\visual studio 2010\Projects\CreaListaDatoNome\CreaListaDatoNome\Service1.asmx.cs:line 24
--- End of inner exception stack trace ---
さて、これは Web サービスのコードです。
namespace CreaListaDatoParametri
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public void CreaLista(string lista, string colonna1, string colonna2)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://sp2010devid/sites/Chapter2/"))
{
using (SPWeb web = site.OpenWeb())
{
site.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;
// Create a new list
string description = "The list " +lista+ " was created via a web service";
Guid idNuovaLista = web.Lists.Add(lista, description, web.ListTemplates["Custom List"]);
//Modify the structure
SPList nuovaLista = web.Lists[idNuovaLista];
nuovaLista.OnQuickLaunch = true;
nuovaLista.EnableFolderCreation = true;
nuovaLista.Fields.Add(colonna1, SPFieldType.Text, true);
nuovaLista.Fields.Add(colonna2, SPFieldType.Text, true);
nuovaLista.Update();
}
}
});
}//end of WebMethod
}//end of classe
}//end of namespace
誰でも私を助けてもらえますか??? たとえば、次のような解決策をグーグルで検索しました。
「Re: CLSID {5D34E962-9F95-4D92-917F-F9B1A4F2BC のコンポーネントの COM クラス ファクトリを取得しています...
アクセスを許可する方法を尋ねていると思います..そうでない場合は申し訳ありませんが、次のことを行ってください.管理ツール->コンポーネントサービスの下. ツリーの下で、[コンポーネント サービス] -> [コンピューター] -> [マイ コンピューター] -> [DCOM 構成] に移動します。登録された com オブジェクトを見つけます。プロパティを右クリックします。セキュリティ タグの下で、asp.net ユーザーを許可するようにアクセス許可をカスタマイズします。
応答: 「ジェフ、迅速な対応に感謝します...私が今直面している問題は、com オブジェクトが登録されているかどうかを知る方法です...?登録されていない場合、どうすれば登録できますか? CLSID (エラー メッセージが CLSID {5D34E962-9F95-4D92-917F-F9B1A4F2BC6E} のコンポーネントを教えてくれるため) が、登録済みの com オブジェクトのリストを見ると表示されません。 ."
応答: 「CLSID の下にリストされているクラスが実際には表示されない場合があります。実際には名前でリストされている可能性があり、コンポーネント サービス ビューが詳細ビュー以外に設定されている場合は表示されない可能性があります。ビューを詳細に変更してください。次に、ApplicationID 列でこの CLSID を探します。」
詳細ビューに変更しても、何も表示されません。助けてください、事前に感謝します。