7

我想将 SharePoint 数据用于非 .Net 平台。为此,我已经使用了 SharePoint OOTB 服务,例如 Lists.asmx、Webs.asmx 和 search.asmx。我已经使用 Authentication.asmx 成功添加了对基于表单的身份验证的支持。现在,我想在线提供对 Office 365 SharePoint 的支持。为此,我有一个我正在开发的演示 SharePoint Online 网站。问题,我面临的是当我使用 Authentication.asmx 的 Mode 方法时,我得到“表单”作为响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <ModeResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
        <ModeResult>Forms</ModeResult>
    </ModeResponse>
</soap:Body>
</soap:Envelope>

但是,当我使用 Login.asmx 并传递正确的用户名和密码时,我收到“PasswordNotMatch”错误,相同的凭据在浏览器中工作正常。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <LoginResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
        <LoginResult>
         <ErrorCode>PasswordNotMatch</ErrorCode>
            <TimeoutSeconds>0</TimeoutSeconds>
        </LoginResult>
    </LoginResponse>
</soap:Body>
</soap:Envelope>

注意:- 这非常适合 FBA 非 Office 365 SharePoint 网站。

有人可以帮我实现对 Office 365 SharePoint Online OOTB 服务的支持吗?

4

1 回答 1

6

我一直在研究类似的想法,这个帖子非常有帮助。他们实际上有一个使用 PInvoke 的 web 服务示例,它可能会帮助您到达那里。

编辑:我的搜索将我带到了 Wictor Wilen的另一篇文章,但现在试图避免使用 ClientOM。

Edit2:好的,得到这个工作。使用上面 Wictor 的代码,我下载了他的示例解决方案并将“MsOnlineClaimsHelper.cs”和“WcfClientContracts.cs”移动到我的项目中,稍后我将摆弄这些文件中真正使用的内容。我只更改了它们以删除 ClientOM 引用,包括 clientContext_ExecutingWebRequest 方法。

在示例 MVC3 应用程序或控制台应用程序中:

MsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper("https://my365site.sharepoint.com/sites/enterprise/", "admin@my365site.onmicrosoft.com", "secret");

using (var lists = new SharePointLists.Lists())
{
    lists.Url = @"https://my365site.sharepoint.com/sites/enterprise/_vti_bin/lists.asmx";
    lists.CookieContainer = claimsHelper.CookieContainer;
    var listCol = lists.GetListCollection();
    ViewBag.Message = listCol.InnerXml;
    //Console.Write(listCol.InnerXml);
}
于 2011-11-11T14:57:09.383 回答