Web services 使用自定义webservice在SharePoint 2013中创建术语集时出错
我正在尝试使用SharePoint 2013服务器中部署的自定义WCF web服务在SharePoint 2013中创建一个新术语集。我已经编写了下面的代码来创建术语集Web services 使用自定义webservice在SharePoint 2013中创建术语集时出错,web-services,sharepoint-2013,csom,Web Services,Sharepoint 2013,Csom,我正在尝试使用SharePoint 2013服务器中部署的自定义WCF web服务在SharePoint 2013中创建一个新术语集。我已经编写了下面的代码来创建术语集 SPSecurity.RunWithElevatedPrivileges(delegate() { using (Impersonator imp = new Impersonator("Username", "Domain", "Password"))
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (Impersonator imp = new Impersonator("Username", "Domain", "Password"))
{
using (SPSite site = new SPSite("http://server:8002/sites/site/"))
{
site.AllowUnsafeUpdates = true;
TaxonomySession session = new TaxonomySession(site);
TermStore termStore = session.TermStores["Managed Metadata Service"];
var termStoreAdmin = termStore.TermStoreAdministrators.Where(obj => obj.PrincipalName.Contains("domain\\username")).FirstOrDefault();
if (termStoreAdmin == null)
termStore.AddTermStoreAdministrator("domain\\username");
Group group = termStore.GetGroup(new Guid(groupGuid));
if (group != null && !string.IsNullOrEmpty(termSetName))
{
TermSet termset = group.TermSets.FirstOrDefault(obj => obj.Name.Equals(termSetName));
if (termset == null)
{
termset = group.CreateTermSet(termSetName);
termSetGuid = termset.Id.ToString();
}
SetupNavTermSet(termset, session, site.OpenWeb());
}
termStore.CommitAll();
}
}
});
我使用soap消息从silverlight代码调用此方法。调用此代码时,执行group.CreateTermSet(termSetName)时出现异常代码>行
错误是:
Error Message : Value cannot be null.
Source : Microsoft.SharePoint
Error Details : at Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetUserIdentifierEncodedClaim(IIdentity identity)
at Microsoft.SharePoint.Taxonomy.Internal.CommonUtilities.GetCurrentUserName()
at Microsoft.SharePoint.Taxonomy.TaxonomySession.get_CurrentUserName()
at Microsoft.SharePoint.Taxonomy.Group.CreateTermSet(String name, Guid newTermSetId, Int32 lcid)
at Microsoft.SharePoint.Taxonomy.Group.CreateTermSet(String name)
at SplitVisionMetadataManagement.CustomManageMetaDataWCFService.<>c__DisplayClassc.<CreateTaxonomyTermSet>b__8()
错误消息:值不能为空。
资料来源:Microsoft.SharePoint
错误详细信息:位于Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetUserIdentifierCodedClaim(IIIdentity identity)
在Microsoft.SharePoint.Taxonomy.Internal.CommonUtilities.GetCurrentUserName()上
在Microsoft.SharePoint.Taxonomy.TaxonomySession.get_CurrentUserName()上
位于Microsoft.SharePoint.Taxonomy.Group.CreateTermSet(字符串名称,Guid newTermSetId,Int32 lcid)
位于Microsoft.SharePoint.Taxonomy.Group.CreateTermSet(字符串名称)
在SplitVisionMetadataManagement.CustomManageMataWCFService.c__DisplayClassc.b__8()中
有人知道这个问题和解决方案吗?我也遇到了同样的问题,并发现Microsoft.SharePoint.Taxonomy.Internal.CommonUtilities.GetCurrentUserName()方法使用HttpContext.Current.User安全主体来获取用户名
我在windows窗体应用程序中使用了类似的代码,因此HttpContext是空的。我通过如下手动设置上下文和用户来解决问题
if (HttpContext.Current == null)
{
HttpRequest request = new HttpRequest("", SiteURL, "");
HttpContext.Current = new HttpContext(request, new HttpResponse(TextWriter.Null));
HttpContext.Current.User = System.Threading.Thread.CurrentPrincipal;
}
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(SiteURL))
{
using (SPWeb web = site.OpenWeb())
{
if (HttpContext.Current.Items["HttpHandlerSPWeb"] == null)
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
// Your SharePoint Term Creation code
}
}
});
在您的案例中,您似乎正在使用基于声明的身份验证,因此声明提供程序在返回名称时出现了一些问题。HTTP上下文将是运行WCF的上下文。您可能需要从这些角度进一步调查
以上知识将有助于你进一步理解它