在Sharepoint 2010上使用CSOM获取WCF Web服务中的当前用户

时间:2015-07-13 21:54:30

标签: c# wcf sharepoint sharepoint-2010 csom

这里的关键部分是应用程序在 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代码,但它与上面的独立控制台应用程序概念验证代码完全相同。

0 个答案:

没有答案