2

我在 SharePoint 2010 中有一个 Web 应用程序,其身份验证模式为 Windows。我扩展了使用基于表单的身份验证的 Web 应用程序 (Zone:Intranet)。我创建了一个示例C# 控制台应用程序来将基于表单的用户添加到站点,并且它成功地添加了用户。

方法:

    private void AddFormsBasedUserToSite(){
        try
        {
            string url = "https://appserver:36732";                
            SPSecurity.RunWithElevatedPrivileges(delegate
            {
                using (SPSite site = new SPSite(url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        string userName = "i:0#.f|aspnetsqlmembershipprovider|forms_user";
                        web.SiteUsers.Add(userName, null, null, null);
                        web.Update();                            
                    }

                }
            });                
        }
        catch (Exception e)
        {
            // Log the exception
        }          
    }

但是当同样的方法暴露在 WCF 服务(托管为 windows 服务)中时,当客户端调用该方法时,它无法添加用户。它抛出以下异常:

用户不存在或不是唯一的。

SharePoint 日志是:

解析http://schemas.microsoft.com/sharepoint/2009/08/claims/userlogonname时出错:来自成员资格提供程序 AspNetSqlMembershipProvider 的 forms_user:System.Web.HttpException:无法连接到 SQL Server 数据库。---> System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean IntegratedSecurity, SqlConnection owningObject)
在System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,字符串 newPassword,布尔 ignoreSniOpenTimeout,Int64 timerExpire,SqlConnection owningObject)
在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(字符串主机,字符串 newPassword,布尔重定向用户实例,SqlConnection owningObject,SqlConnectionString connectionOptions , Int64 timerStart)
在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup)
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.SqlClient.SqlConnection.Open()
在 System.Web.Management。 SqlServices.GetSqlConnection(String server, String user, String password, Boolean trust, String connectionString) - -- 内部异常堆栈跟踪结束 ---
在 System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password , Boolean trust, String connectionString)
在 System.Web.Management.SqlServices.SetupApplicationServices(字符串服务器,字符串用户,字符串密码,布尔可信,字符串连接字符串,字符串数据库,字符串 dbFileName,SqlFeatures 功能,布尔安装)
在 System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(字符串 在 System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation)在System.Web.DataAccess.SqlConnectionHelper.EnsureSqlExpressDBFile(String
connectionString ) 在 System.Web.Security.SqlMembershipProvider.GetUser(字符串用户名,布尔值 userIsOnline)


在 Microsoft.SharePoint.Administration.Claims.SPFormsClaimProvider.Resolve 的 Microsoft.SharePoint.Utilities.SPMembershipProviderPrincipalResolver.ResolvePrincipal(字符串输入,布尔 inputIsEmailOnly,SPPrincipalType 范围,SPPrincipalSource 源,SPUserCollection usersContainer)
(SPPrincipalResolver 解析器,布尔 inputIsEmailOnly,SPPrincipalSource pricipalSource,SPPrincipalType pricipalType , 字符串解析输入,列表1 已解析)1 resolved)
at Microsoft.SharePoint.Administration.Claims.SPFormsClaimProvider.FillResolve(Uri context, Boolean allZones, String[] entityTypes, SPClaim resolveInput, List

请帮我弄清楚?

谢谢普拉卡什

4

0 回答 0