这里的关键部分是应用程序在 WCF Web服务应用程序中运行,并且正在从URL调用。我对WCF服务的设置几乎与本教程相同 - https://jobrocol.wordpress.com/2012/06/03/custom-rest-wcf-service-in-sharepoint-2010/comment-page-1/
我创建了一个小测试,只是一个控制台应用程序。此代码按预期工作:
using SP = Microsoft.SharePoint.Client;
public static void addNewItemToSPList() {
string siteUrl = "http://my.domain.com/";
string subSite = "temp/subsite";
string spList = "GenericTestList";
bool returnVal = false;
try {
using (ClientContext clientCtx = new ClientContext(siteUrl + subSite)) {
// Get default credentials
clientCtx.Credentials = CredentialCache.DefaultNetworkCredentials;
if (DoesUserHavePermissions(clientCtx, spList, PermissionKind.AddListItems)) {
SP.List oList = clientCtx.Web.Lists.GetByTitle(spList);
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem oListItem = oList.AddItem(itemCreateInfo);
oListItem["Title"] = "Test";
oListItem.Update();
// Add a new list item
clientCtx.ExecuteQuery();
}
}
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
public static bool DoesUserHavePermissions(ClientContext ctx, string listname, PermissionKind permmask) {
try {
SP.List TargetList = ctx.Web.Lists.GetByTitle(listname);
ctx.Load(TargetList, T => T.EffectiveBasePermissions);
ctx.ExecuteQuery();
return TargetList.EffectiveBasePermissions.Has(permmask);
} catch {
return false;
}
}
static void Main(string[] args) {
addNewItemToSPList();
}
但是,当我尝试在WCF应用程序中执行非常类似的操作时,我会收到错误。几乎只有401 Access Denied错误。
我非常确定我的问题是我如何获得clientCtx.Credentials
,但我已经尝试了一些方法来获取SP网站当前登录的用户信誉,但似乎没有工作。
有什么建议吗?我可以包含一些WCF代码,但它与上面的独立控制台应用程序概念验证代码完全相同。