Как пройти аутентификацию в сервисах Project Online PSI?

У меня есть учетная запись MS Project Online на sharepoint.com, и мне нужно пройти проверку подлинности с помощью клиентского кода C# для служб PSI, чтобы получить список проектов.

Сервер имеет проверку подлинности на основе форм. Я пытаюсь войти через следующий код:

SvcLoginForms.LoginForms loginform = new SvcLoginForms.LoginForms();
loginform.Credentials = new NetworkCredential("admin@myserver.onmicrosoft.com", "password");            
loginform.Url = "https://myserver.sharepoint.com/sites/pwa/_vti_bin/PSI/Project.asmx";
loginform.Login("admin@myserver.onmicrosoft.com", "password");

Когда я выполняю loginform.Login, я получаю SoapException с сообщением: "Значение не может быть нулевым. Имя параметра: account". Внутреннее исключение xml:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Value cannot be null.

Имя параметра: аккаунт

Что я делаю не так?

2 ответа

Решение

Ты можешь использовать:

new SharePointOnlineCredentials(username, secpassword);

вместо

new NetworkCredential("admin@myserver.onmicrosoft.com", "password");

Сначала: установите необходимый клиентский SDK

Второе: добавьте ссылку на ваш проект

  1. Microsoft.SharePoint.Client.dll
  2. Microsoft.SharePoint.Client.Runtime.dll
  3. Microsoft.ProjectServer.Client.dll

Вы можете найти DLL в %programfiles%\Common Files\microsoft shared\Web Server Extensions\15\ISAPIа также %programfiles(x86)%\Microsoft SDKs\Project 2013\REDIST

Вот пример кода:

using System;
using System.Security;
using Microsoft.ProjectServer.Client;
using Microsoft.SharePoint.Client;

public class Program
{
    private const string pwaPath = "https://[yoursitehere].sharepoint.com/sites/pwa";
    private const string username ="[username]";
    private const string password = "[password]";
    static void Main(string[] args)
    {
        SecureString secpassword = new SecureString();
        foreach (char c in password.ToCharArray()) secpassword.AppendChar(c);


        ProjectContext pc = new ProjectContext(pwaPath);
        pc.Credentials = new SharePointOnlineCredentials(username, secpassword);

        //now you can query
        pc.Load(pc.Projects);
        pc.ExecuteQuery();
        foreach(var p in pc.Projects)
        {
            Console.WriteLine(p.Name);
        }

        //Or Create a new project
        ProjectCreationInformation newProj = new ProjectCreationInformation() {
            Id = Guid.NewGuid(),
            Name = "[your project name]",
            Start = DateTime.Today.Date
        };        
        PublishedProject newPublishedProj = pc.Projects.Add(newProj);
        QueueJob qJob = pc.Projects.Update();

        JobState jobState = pc.WaitForQueue(qJob,/*timeout for wait*/ 10);

    }

}

Аутентификация в сервисах Project Online PSI описана в этой превосходной статье: http://www.umtsoftware.com/blog/how-to-project-online-psi/

Другие вопросы по тегам