Share via


Voraussetzungen für ASMX-basierte Codebeispiele in Project

Erfahren Sie, wie Sie Projekte in Visual Studio erstellen können, indem Sie die ASMX-basierten Codebeispiele verwenden, die in den Referenzthemen zu Project Server Interface (PSI) enthalten sind.

Viele der Codebeispiele, die in der Project Server 2013-Klassenbibliothek und Webdienstreferenz enthalten sind, wurden ursprünglich für das Office Project 2007 SDK erstellt und verwenden ein Standardformat für ASMX-Webdienste. Die Beispiele funktionieren weiterhin in Project Server 2013 und sind so konzipiert, dass sie in eine Konsolenanwendung kopiert und als vollständige Einheit ausgeführt werden. Ausnahmen sind im Beispiel angegeben.

Neue PSI-Beispiele im Project 2013 SDK entsprechen einem Format, das WCF-Dienste (Windows Communication Foundation) verwendet. Die ASMX-basierten Beispiele können auch an die Verwendung von WCF-Diensten angepasst werden. In diesem Artikel erfahren Sie, wie Sie die Beispiele mit ASMX-Webdiensten verwenden. Informationen zur Verwendung der Beispiele mit WCF-Diensten finden Sie unter Voraussetzungen für WCF-basierte Codebeispiele in Project.

Hinweis

Die ASMX-Webdienstschnittstelle der PSI ist in Project Server 2013 zwar veraltet, wird aber weiterhin unterstützt. Wenn das clientseitige Objektmodell (CSOM) die Für Ihre Anwendung benötigten Methoden enthält, sollten neue Anwendungen mit dem CSOM entwickelt werden. Das CSOM ermöglicht Es Anwendungen, mit Project Online oder einer lokalen Installation von Project Server 2013 zu arbeiten. Wenn Ihre Anwendung die PSI verwendet, sollte sie andernfalls die WCF-Schnittstelle verwenden. Dies ist die Technologie, die wir für die Netzwerkkommunikation empfehlen. Anwendungen, die die ASMX-Schnittstelle oder die WCF-Schnittstelle verwenden, können nur für lokale Installationen von Project Server 2013 verwendet werden. Weitere Informationen zum CSOM finden Sie unter Project Server 2013-Architektur und Clientseitiges Objektmodell (CSOM) für Project 2013.

Bevor Sie die Codebeispiele ausführen, müssen Sie die Entwicklungsumgebung einrichten, die Anwendung konfigurieren und generische Konstantenwerte entsprechend Ihrer Umgebung ändern.

Einrichten der Entwicklungsumgebung

  1. Richten Sie ein Project Server-Testsystem ein.

    Verwenden Sie ein Project Server-Testsystem, wenn Sie entwickeln oder testen. Selbst wenn Ihr Code perfekt funktioniert, können Interprojektabhängigkeiten, Berichte oder andere Umgebungsfaktoren unbeabsichtigte Folgen haben.

    Hinweis

    Stellen Sie sicher, dass Sie ein gültiger Benutzer auf dem Server sind, und überprüfen Sie, ob Sie über ausreichende Berechtigungen für die PSI-Aufrufe verfügen, die Ihre Anwendung verwendet. Das Referenzthema für jede PSI-Methode enthält eine Project Server-Berechtigungstabelle. Beispielsweise erfordert die Project.QueueCreateProject-Methode die globale NewProject-Berechtigung und die SaveProjectTemplate-Berechtigung .

    In einigen Fällen müssen Sie möglicherweise Remotedebuggen auf dem Server ausführen. Möglicherweise müssen Sie auch einen Ereignishandler einrichten, indem Sie eine Ereignishandlerassembly auf jedem Project Server-Computer in der SharePoint-Farm installieren und dann den Ereignishandler für die Project Web App-instance konfigurieren, indem Sie die Seite Project Server-Einstellungen in den allgemeinen Anwendungseinstellungen der SharePoint-Zentraladministration verwenden.

  2. Richten Sie einen Entwicklungscomputer ein.

    In der Regel greifen Sie über ein Netzwerk auf die PSI zu. Die Codebeispiele sind so konzipiert, dass sie auf einem Client ausgeführt werden, der vom Server getrennt ist, sofern nicht angegeben.

    1. Installieren Sie die richtige Version von Visual Studio. Sofern nicht angegeben, werden die Codebeispiele in Visual C# geschrieben. Sie können mit Visual Studio 2010 oder Visual Studio 2012 verwendet werden. Stellen Sie sicher, dass das neueste Service Pack installiert ist.

    2. Kopieren Sie Project Server-DLLs auf den Entwicklungscomputer. Kopieren Sie die folgenden Assemblys von [Program Files]\Microsoft Office Servers\15.0\Bin auf dem Project Server-Computer auf den Entwicklungscomputer:

      • Microsoft.Office.Project.Server.Events.Receivers.dll
      • Microsoft.Office.Project.Server.Library.dll
    3. Informationen zum Kompilieren und Verwenden der ProjectServerServices.dll Proxyassembly für die ASMX-Webdienste in der PSI finden Sie unter Verwenden einer PSI-Proxyassembly und IntelliSense-Beschreibungen.

  3. Installieren Sie die IntelliSense-Dateien.

    Um IntelliSense-Beschreibungen für Klassen und Member in Project Server-Assemblys zu verwenden, kopieren Sie die aktualisierten IntelliSense-XML-Dateien aus dem Project 2013 SDK-Download in dasselbe Verzeichnis, in dem sich die Project Server-Assemblys befinden. Kopieren Sie z. B. die Microsoft.Office.Project.Server.Library.xml-Datei in das Verzeichnis, in dem Ihre Anwendung einen Verweis auf die Microsoft.Office.Project.Server.Library.dll-Assembly festgelegt.

    IntelliSense-Beschreibungen für die PSI-Webdienste erfordern, dass Sie eine PSI-Proxyassembly mit dem CompileASMXProxyAssembly.cmd Skript im Documentation\IntelliSense\WSDL Unterverzeichnis im Project 2013 SDK-Download erstellen. Das Skript erstellt die ASMX-basierte ProjectServerServices.dll Proxyassembly. Weitere Informationen finden Sie in der Datei [ReadMe_IntelliSense] im SDK-Download.

Erstellen der Anwendung und Hinzufügen eines Webdienstverweises

  1. Erstellen Sie eine Konsolenanwendung.

    Wenn Sie eine Konsolenanwendung erstellen, wählen Sie in der Dropdownliste des Dialogfelds Neues Projekt.NET Framework 4 aus. Sie können den PSI-Beispielcode in die neue Anwendung kopieren.

  2. Fügen Sie den für ASMX erforderlichen Verweis hinzu.

    Fügen Sie Projektmappen-Explorer einen Verweis auf System.Web.Services hinzu (siehe Abbildung 1).

    Abbildung 1: Hinzufügen eines Verweises in Visual Studio

    Hinzufügen eines Verweises in Visual Studio

  3. Kopieren Sie den Code.

    Kopieren Sie das vollständige Codebeispiel in die Program.cs-Datei der Konsolenanwendung.

  4. Legen Sie den Namespace für die Beispielanwendung fest.

    Sie können entweder den oben im Beispiel aufgeführten Namespace in den Standardnamespace der Anwendung ändern oder den Standardanwendungsnamespace so ändern, dass er dem Beispiel entspricht. Sie können den Standardanwendungsnamespace ändern, indem Sie die Anwendungseigenschaften ändern.

    Das Codebeispiel für QueueRenameProject weist beispielsweise den Namespace Microsoft.SDK.Project.Samples.RenameProject auf. Wenn der Name des Visual Studio-Projekts RenameProject lautet, kopieren Sie den Namespace aus der Program.cs Datei, und öffnen Sie dann den Projekteigenschaftenbereich (wählen Sie im Menü Projekt die Option Projekteigenschaften umbenennen aus). Kopieren Sie auf der Registerkarte Anwendung den Namespace in das Textfeld Standardnamespace .

  5. Legen Sie die Webverweise fest.

    Die meisten Beispiele erfordern einen Verweis auf einen oder mehrere der PSI-Webdienste. Diese sind im Beispiel selbst oder in Kommentaren aufgeführt, die dem Beispiel vorausgehen. Um den richtigen Namespace der Webverweise abzurufen, stellen Sie sicher, dass Sie zuerst den Standardanwendungsnamespace festlegen.

    Es gibt drei Möglichkeiten, einen ASMX-Webdienstverweis für die PSI hinzuzufügen:

Verwenden einer PSI-Proxyassembly und IntelliSense-Beschreibungen

Sie können die ProjectServerServices.dll Proxyassembly für alle ASMX-basierten Webdienste in der PSI erstellen und verwenden, indem Sie das skript CompileASMXProxyAssembly.cmd im Documentation\IntelliSense\WSDL Ordner des Project 2013 SDK-Downloads verwenden. Einen Link zum Download finden Sie in der Project 2013-Entwicklerdokumentation.

Hinweis

Wenn Sie die Proxyquelldateien aus der Source.zip-Datei extrahieren, sind die Dateien im Documentation\IntelliSense\WSDL\Source Ordner ab dem Veröffentlichungsdatum des Project 2013 SDK-Downloads aktuell. Um aktualisierte PSI-Proxyquelldateien zu generieren, führen Sie das GenASMXProxyAssembly.cmd Skript auf dem Project Server-Computer aus. Die Skripts im Documentation\IntelliSense\WCF Ordner funktionieren nicht für ASMX-basierte Anwendungen. Das GenWCFProxyAssembly.cmd Skript ruft SvcUtil.exe auf, das Quellcodedateien für die WCF-Dienste generiert. Die WCF-Proxydateien enthalten verschiedene Attribute, die Kanalschnittstelle und eine Clientklasse für jeden PSI-Dienst. Der WCF-basierte Ressourcendienst umfasst beispielsweise die ResourceChannel-Schnittstelle , die Resource-Schnittstelle und die ResourceClient-Klasse . Das ASMX-basierte Ressourcenweb enthält die Resource-Klasse mit einigen verschiedenen Eigenschaften.

Im Folgenden finden Sie das GenASMXProxyAssembly.cmd Skript, das WSDL-Ausgabedateien für die PSI-Webdienste generiert und dann die Assembly kompiliert.

@echo off
@ECHO ---------------------------------------------------
@ECHO Creating C# files for the ASMX-based proxy assembly
@ECHO ---------------------------------------------------
REM Replace ServerName with the name of the server and 
REM the instance name of Project Web App. Do not use localhost.
(set VDIR=https://ServerName/pwa/_vti_bin/psi)
(set OUTDIR=.\Source)
REM ** Wsdl.exe is the same version in the v6.0A and v7.0A subdirectories. 
(set WSDL="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\wsdl.exe")
if not exist %OUTDIR% (
md %OUTDIR%
)
for /F %%i in (Classlist_asmx.txt) do %WSDL% /nologo /l:CS /namespace:Svc%%i /out:%OUTDIR%\wsdl.%%i.cs %VDIR%/%%i.asmx?wsdl 
@ECHO ----------------------------
@ECHO Compiling the proxy assembly
@ECHO ----------------------------
(set SOURCE=%OUTDIR%\wsdl)
(set CSC=%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe)
(set ASSEMBLY_NAME=ProjectServerServices.dll)
%CSC% /t:library /out:%ASSEMBLY_NAME% %SOURCE%*.cs

Das Skript verwendet die ClassList_asmx.txt-Datei, die die Liste der Webdienste enthält, die für Drittanbieterentwickler verfügbar sind.

Admin
Archive
Calendar
CubeAdmin
CustomFields
Driver
Events
LoginForms
LoginWindows
LookupTable
Notifications
ObjectLinkProvider
PortfolioAnalyses
Project
QueueSystem
ResourcePlan
Resource
Security
Statusing
TimeSheet
Workflow
WssInterop

Die Skripts erstellen eine Assembly mit dem Namen ProjectServerServices.dll. Verwechseln Sie es nicht mit ProjectServerServices.dll für die WCF-basierte Assembly. Die Assemblynamen sind identisch, um die Verwendung einer assembly mit der ProjectServerServices.xml IntelliSense-Datei zu ermöglichen.

Der beliebige Namespace, der von den Skripts sowohl für die ASMX-Webdienste als auch für die WCF-Dienste erstellt wird, ist identisch, sodass die ProjectServerServices.xml IntelliSense-Datei mit beiden Assemblys funktioniert. Beispielsweise lautet der Namespace des Ressourcendiensts in der WCF-basierten Proxyassembly und in der ASMX-basierten Proxyassembly SvcResource. Sie können die Namespacenamen natürlich ändern, wenn Sie sicherstellen, dass sie in der Proxyassembly und in der ProjectServerServices.xml IntelliSense-Datei übereinstimmen.

Wenn ein Codebeispiel einen anderen Namen für einen PSI-Webdienstnamespace verwendet, z. B. ProjectWebSvc, damit IntelliSense funktioniert, müssen Sie das Beispiel so ändern, dass SvcProject verwendet wird, damit der Namespace mit der Proxyassembly übereinstimmt.

Ein Vorteil der Verwendung der ASMX-basierten Proxyassembly besteht darin, dass sie alle PSI-Webdienstnamespaces enthält. Sie müssen nicht mehrere Webverweise erstellen. Ein weiterer Vorteil besteht darin, dass Sie IntelliSense-Beschreibungen für die PSI-Klassen und -Member abrufen können, wenn Sie die ProjectServerServices.xml Datei demselben Verzeichnis hinzufügen, in dem Sie einen Verweis auf die ProjectServerServices.dll Proxyassembly festlegen. Abbildung 2 zeigt den IntelliSense-Text für die Project.QueueCreateProject-Methode . Weitere Informationen finden Sie in der Datei [ReadMe_IntelliSense] im IntelliSense-Ordner des Project 2013 SDK-Downloads.

Abbildung 2: Verwenden von IntelliSense für eine Methode im Project-Webdienst

Verwenden von IntelliSense für eine Methode in einem PSI-Dienst

Nachteile bei der Verwendung der Proxyassembly sind, dass die Lösung größer ist und Sie die Proxyassembly mit der Lösung verteilen und installieren müssen. Sie müssen auch die gleichen Namespaces verwenden, die sich in der Proxyassembly und intelliSense-Dateien befinden, es sei denn, Sie ändern das Skript und ProjectServerServices.xml IntelliSense-Datei, um verschiedene Namespaces zu verwenden.

Hinzufügen einer PSI-Proxydatei

Der Project 2013 SDK-Download enthält die Quelldateien, die vom Befehl Wsdl.exe für die Proxyassembly generiert werden. Die Quelldateien befinden sich in Source.zip im Documentation\IntelliSense\ASMX Unterverzeichnis. Anstatt einen Verweis auf die Proxyassembly festzulegen, können Sie einer Visual Studio-Projektmappe eine oder mehrere Quelldateien hinzufügen. Fügen Sie beispielsweise nach dem Ausführen des GenASMXProxyAssembly.cmd-Skripts die wsdl hinzu. Project.cs Datei in die Projektmappe ein. Anstatt das Skript auszuführen, können Sie die folgenden Befehle ausführen, um eine einzelne Quelldatei zu generieren, z. B.:

set VDIR=https://ServerName/ProjectServerName/_vti_bin/psi
set WSDL="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\wsdl.exe"
%WSDL% /nologo /l:cs /namespace:SvcProject /out:wsdl.Project.cs %VDIR%/Project.asmx?wsdl

Verwenden Sie den folgenden Code, um ein Project-Objekt als Klassenvariable mit dem Namen project zu definieren. Die AddContextInfo-Methode fügt dem Projektobjekt die Kontextinformationen für die Windows-Authentifizierung- und formularbasierte Authentifizierung hinzu.

private static SvcProject.Project project;
private static SvcLoginForms.LoginForms loginForms =
            new SvcLoginForms.LoginForms();
. . .
public void AddContextInfo()
{
    // Add the Url property.
    project.Url = "https://ServerName /ProjectServerName /_vti_bin/psi/project.asmx";
    // Add Windows credentials.
    project.Credentials = CredentialCache.DefaultCredentials;
    // If Forms authentication is used, add the Project Server cookie.
    project.CookieContainer = loginForms.CookieContainer;
}

Hinweis

Unabhängig davon, ob Sie eine PSI-Proxyassembly verwenden oder eine Proxydatei für einen Project-Dienstverweis namens SvcProject hinzufügen, verwenden Sie denselben Code, um ein Projektobjekt zu erstellen.

Hinzufügen eines Webdienstverweises

Wenn Sie die ASMX-basierte Proxyassembly nicht verwenden oder keine WSDL-Ausgabedatei hinzufügen, können Sie einen oder mehrere einzelne Webverweise festlegen. Die folgenden Schritte zeigen, wie Sie einen Webverweis mithilfe von Visual Studio 2012 festlegen.

  1. Klicken Sie Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Verweise, und wählen Sie dann Dienstverweis hinzufügen aus.

  2. Wählen Sie im Dialogfeld Dienstverweis hinzufügen die Option Erweitert aus.

  3. Wählen Sie im Dialogfeld Dienstverweiseinstellungendie Option Webverweis hinzufügen aus.

  4. Geben Sie im Textfeld URL ein https:// _ServerName_/ _ProjectServerName_/_vti_bin/psi/ _ServiceName_.asmx?wsdl, und drücken Sie dann die EINGABETASTE , oder wählen Sie das Symbol Gehe zu aus. Wenn Sie Secure Sockets Layer (SSL) installiert haben, sollten Sie anstelle des HTTP-Protokolls das HTTPS-Protokoll verwenden.

    Verwenden Sie beispielsweise die folgende URL für den Project-Dienst auf der https://MyServer/pwa Website für Project Web App: https://MyServer/pwa/_vti_bin/psi/project.asmx?wsdl

    Oder öffnen Sie Ihren Webbrowser, und navigieren Sie zu https://ServerName/ProjectServerName/_vti_bin/psi/ServiceName.asmx?wsdl. Speichern Sie die Datei in einem lokalen Verzeichnis, z C:\Project\WebServices\ServiceName.wsdl. B. . Geben Sie im Dialogfeld Webverweis hinzufügen unter URL das Dateiprotokoll und den Pfad zur Datei ein. Geben Sie beispielsweise ein file://C:\Project\WebServices\Project.wsdl.

  5. Nachdem der Verweis aufgelöst wurde, geben Sie den Verweisnamen in das Textfeld Webverweisname ein . Codebeispiele in der Project 2013-Entwicklerdokumentation verwenden den beliebigen Standardverweisnamen Svc ServiceName. Der Project-Webdienst heißt z. B. SvcProject (siehe Abbildung 3).

    Abbildung 3: Hinzufügen eines ASMX-Webdienstverweises

    Hinzufügen eines ASMX-Webdienstverweises

Verwenden Sie für Anwendungskomponenten, die auf dem Project Server-Computer ausgeführt werden müssen, einen Identitätswechsel verwenden oder über erhöhte Berechtigungen verfügen, anstelle eines ASMX-Webverweises einen WCF-Dienstverweis. Weitere Informationen finden Sie unter Voraussetzungen für WCF-basierte Codebeispiele in Project.

Festlegen anderer Verweise

Project Server-Anwendungen verwenden häufig andere Dienste, z. B. SharePoint Server 2013-Webdienste. Wenn andere Dienste erforderlich sind, werden diese im Beispiel notiert.

Lokale Verweise für das Codebeispiel sind in using-Anweisungen oben im Beispiel aufgeführt:

  1. Klicken Sie Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Verweise, und wählen Sie dann Verweis hinzufügen aus.

  2. Wählen Sie Durchsuchen aus, und navigieren Sie dann zu dem Speicherort, an dem Sie die zuvor kopierten Project Server-DLLs gespeichert haben. Wählen Sie die benötigten DLLs und dann OK aus.

Hinweis

Stellen Sie sicher, dass die Assemblyversionen auf Ihrem Entwicklungscomputer genau mit denen auf dem Project Server-Zielcomputer übereinstimmen.

Verwenden mehrerer Authentifizierungen

Die Authentifizierung lokaler Project Server-Benutzer erfolgt über Windows-Authentifizierung- oder Formularauthentifizierung über die Anspruchsverarbeitung in SharePoint Server 2013. Mehrfachauthentifizierung bedeutet, dass die Webanwendung, in der Project Web App bereitgestellt wird, sowohl Windows-Authentifizierung als auch formularbasierte Authentifizierung unterstützt. Wenn dies der Fall ist, schlägt ein Aufruf eines ASMX-Webdiensts, der Windows-Authentifizierung verwendet, mit dem folgenden Fehler fehl, da der Anspruchsprozess nicht ermitteln kann, welcher Benutzertyp authentifiziert werden soll:

The server was unable to process the request due to an internal error. . . .

Um das Problem für ASMX zu beheben, sollten alle Aufrufe von PSI-Methoden an eine abgeleitete Klasse erfolgen, die für jeden PSI-Webdienst definiert ist. Die abgeleitete Klasse muss auch die SvcLoginWindows.LoginWindows-Klasse verwenden, um ein Cookie für die abgeleitete PSI-Dienstklasse abzurufen. Im folgenden Beispiel wird die ProjectDerived-Klasse von der SvcProject.Project-Klasse abgeleitet. Die abgeleitete Klasse fügt die EnforceWindowsAuth-Eigenschaft hinzu und überschreibt den Webanforderungsheader für jeden Aufruf einer Methode in der Project-Klasse . Wenn die EnforceWindowsAuth-Eigenschafttrue ist, fügt die GetWebRequest-Methode einen Header hinzu, der die Formularauthentifizierung deaktiviert. Wenn EnforceWindowsAuthauf false festgelegt ist, kann die Formularauthentifizierung fortgesetzt werden.

Um das folgende ASMXLogon_MultiAuth Beispiel zu verwenden, erstellen Sie eine Konsolenanwendung, führen Sie die Schritte unter Erstellen der Anwendung und Hinzufügen eines Webdienstverweises aus, und fügen Sie dann die wsdl hinzu. LoginWindows.cs Proxydatei und wsdl. Project.cs Proxydatei. Die Main-Methode erstellt das Projekt instance der ProjectDerived-Klasse. Im Beispiel muss die abgeleitete LoginWindowsDerived-Klasse verwendet werden, um ein CookieContainer-Objekt für das Projekt abzurufen. CookieContainer-Eigenschaft, die die Formularauthentifizierung von Windows-Authentifizierung unterscheidet. Das Projektobjekt kann dann zum Aufrufen einer beliebigen Methode in der SvcProject.Project-Klasse verwendet werden.

Hinweis

Der LoginWindows-Dienst ist nur für ASMX-Anwendungen in einer Umgebung mit mehreren Authentifizierungen erforderlich. Im ASMXLogon_MultiAuth Beispiel ruft die GetLogonCookie-Methode ein Cookie für das loginWindows-Objekt ab. Das Projekt. Die CookieContainer-Eigenschaft wird auf den Wert loginWindows.CookieContainer festgelegt.

using System;
using System.Net;
using PSLibrary = Microsoft.Office.Project.Server.Library;
namespace ASMXLogon_MultiAuth
{
    class Program
    {
        private const string PROJECT_SERVER_URL = 
            "https://ServerName/ProjectServerName/_vti_bin/psi/";
        static void Main(string[] args)
        {
            bool isWindowsUser = true;
            // Create an instance of the project object.
            ProjectDerived project = new ProjectDerived();
            project.Url = PROJECT_SERVER_URL + "Project.asmx";
            project.Credentials = CredentialCache.DefaultCredentials;
            try
            {
                // The program works on a Windows-auth-only computer if you comment-out the
                // following line. The line is required for multiple authentication.
                project.CookieContainer = GetLogonCookie();
                project.EnforceWindowsAuth = isWindowsUser;
                // Get a list of all published projects. 
                // Use ReadProjectStatus instead of ReadProjectList,
                // because the permission requirements are lower.
                SvcProject.ProjectDataSet projectDs =
                    project.ReadProjectStatus(Guid.Empty,
                        SvcProject.DataStoreEnum.PublishedStore,
                        string.Empty,
                        (int)PSLibrary.Project.ProjectType.Project);
                Console.WriteLine(string.Format(
                    "There are {0} published projects.", 
                    projectDs.Project.Rows.Count));
            }
            catch (UnauthorizedAccessException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (WebException ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.Write("Press any key to continue...");
                Console.ReadKey(false);
            }
        }
        private static CookieContainer GetLogonCookie()
        {
            // Create an instance of the loginWindows object.
            LoginWindowsDerived loginWindows = new LoginWindowsDerived();
            loginWindows.EnforceWindowsAuth = true;
            loginWindows.Url = PROJECT_SERVER_URL + "LoginWindows.asmx";
            loginWindows.Credentials = CredentialCache.DefaultCredentials;
            loginWindows.CookieContainer = new CookieContainer();
            if (!loginWindows.Login())
            {
                // Login failed; throw an exception.
                throw new UnauthorizedAccessException("Login failed.");
            }
            return loginWindows.CookieContainer;
        }
    }
    // Derive from LoginWindows class; include additional property and 
    // override the web request header.
    class LoginWindowsDerived : SvcLoginWindows.LoginWindows
    {
        public bool EnforceWindowsAuth { get; set; }
        protected override WebRequest GetWebRequest(Uri uri)
        {
            WebRequest request = base.GetWebRequest(uri);
            if (this.EnforceWindowsAuth)
            {
                request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
            }
            return request;
        }
    }
    // Derive from Project class; include additional property and 
    // override the web request header.
    class ProjectDerived : SvcProject.Project
    {
        public bool EnforceWindowsAuth { get; set; }
        protected override WebRequest GetWebRequest(Uri uri)
        {
            WebRequest request = base.GetWebRequest(uri);
            if (this.EnforceWindowsAuth)
            {
                request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
            }
            return request;
        }
    }
}

Die Verwendung der abgeleiteten LoginWindows-Klasse und das Ausführen von PSI-Aufrufen mit einem Webanforderungsheader, der die Formularauthentifizierung deaktiviert, ist für Anwendungen erforderlich, die in einer Umgebung mit mehreren Authentifizierungen ausgeführt werden. Wenn Project Server nur die Anspruchsauthentifizierung verwendet, ist es nicht erforderlich, eine Klasse abzuleiten, die einen Webanforderungsheader hinzufügt. Das vorherige Beispiel wird in beiden Umgebungen ausgeführt.

Der Fix für eine WCF-basierte Anwendung ist anders. Weitere Informationen finden Sie im Abschnitt Verwenden mehrerer Authentifizierungen unter Voraussetzungen für WCF-basierte Codebeispiele in Project.

Ändern der Werte generischer Konstanten

Die meisten Beispiele verfügen über eine oder mehrere Variablen, die Sie aktualisieren müssen, damit das Beispiel in Ihrer Umgebung ordnungsgemäß funktioniert. Wenn Sie im folgenden Beispiel SSL installiert haben, verwenden Sie das HTTPS-Protokoll anstelle des HTTP-Protokolls. Ersetzen Sie ServerName durch den Namen des verwendeten Servers. Ersetzen Sie ProjectServerName durch den Namen des virtuellen Verzeichnisses Ihrer Project Server-Website, z. B. PWA.

const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";

Alle anderen Variablen, die Sie ändern müssen, oder andere Voraussetzungen werden am Anfang des Codebeispiels notiert.

Überprüfen der Ergebnisse

Das Abrufen und Interpretieren von Ergebnissen aus einem Codebeispiel ist nicht immer einfach. Wenn Sie beispielsweise ein Projekt erstellen, müssen Sie das Projekt veröffentlichen, bevor es auf der Seite Projektcenter in Project Web App angezeigt werden kann.

Sie können Codebeispielergebnisse auf verschiedene Arten überprüfen, z. B.:

  • Verwenden Sie den Project Professional 2013-Client, um das Projekt auf dem Project Server-Computer zu öffnen und die gewünschten Elemente anzuzeigen.

  • Zeigen Sie veröffentlichte Projekte auf der Seite Projektcenter von Project Web App ( https://ServerName/ProjectServerName/projects.aspx) an.

  • Zeigen Sie das Warteschlangenprotokoll in Project Web App an. Öffnen Sie die Seite Servereinstellungen (wählen Sie das Symbol Einstellungen in der oberen rechten Ecke aus), und wählen Sie dann im Abschnitt Persönliche Einstellungen ( https://ServerName/ProjectServerName/MyJobs.aspx) die Option Meine Aufträge in der Warteschlange aus. In der Dropdownliste Ansicht können Sie nach dem Auftrag sortieren, status. Die Standard-status ist In Bearbeitung und Fehlgeschlagene Aufträge in der letzten Woche.

  • Verwenden Sie die Seite Servereinstellungen in Project Web App ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx), um alle Warteschlangenaufträge zu verwalten und eincheckbare Enterprise-Objekte zu löschen oder zu erzwingen. Sie müssen über Administratorberechtigungen verfügen, um auf diese Links auf der Seite Servereinstellungen zugreifen zu können.

  • Verwenden Sie Microsoft SQL Server Management Studio, um eine Abfrage für eine Tabelle in der Project-Datenbank auszuführen. Verwenden Sie beispielsweise die folgende Abfrage, um die ersten 200 Zeilen des Pub auszuwählen. MSP_WORKFLOW_STAGE_PDPS Tabelle, um Informationen zu den Projektdetailseiten (PDPs) in Workflowphasen anzuzeigen.

      SELECT TOP 200 [STAGE_UID]
              ,[PDP_UID]
              ,[PDP_NAME]
              ,[PDP_POSITION]
              ,[PDP_ID]
              ,[PDP_STAGE_DESCRIPTION]
              ,[PDP_REQUIRES_ATTENTION]
          FROM [ProjectService].[pub].[MSP_WORKFLOW_STAGE_PDPS]
    

Löschen

Nachdem Sie einige Codebeispiele getestet haben, gibt es Enterprise-Objekte und -Einstellungen, die gelöscht oder zurückgesetzt werden sollten. Sie können die Seite Servereinstellungen in Project Web App verwenden, um Unternehmensdaten zu verwalten ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx). Links auf der Seite Servereinstellungen ermöglichen es Ihnen, alte Elemente zu löschen, Eincheckprojekte zu erzwingen, die Auftragswarteschlange für alle Benutzer zu verwalten und andere administrative Aufgaben auszuführen.

Im Folgenden finden Sie einige der Links auf der Seite Servereinstellungen, die Sie nach dem Ausführen von Codebeispielen für typische Bereinigungsaktivitäten verwenden können:

  • Benutzerdefinierte Enterprise-Felder und Nachschlagetabellen

  • Verwalten von Warteschlangenaufträgen

  • Löschen von Enterprise-Objekten

  • Erzwingen des Eincheckens von Enterprise Objects

  • Enterprise-Projekttypen

  • Workflowphasen

  • Workflowstufen

  • Projektdetailseiten

  • Zeiträume in Zeitberichten

  • Einstellungen und Standardwerte in der Arbeitszeittabelle

  • Zeilenklassifizierungen

Zusätzliche Einstellungen werden von SharePoint Server 2013 für jede Project Web App-instance und nicht von einer bestimmten Project Web App Server-Einstellungsseite verwaltet. Wählen Sie in der SharePoint-Zentraladministration die Option Allgemeine Anwendungseinstellungen, unter Project Server-Einstellungen die Option Verwalten aus, und wählen Sie dann in der Dropdownliste auf der Seite Servereinstellungen den instance Project Web App aus. Wählen Sie beispielsweise Serverseitige Ereignishandler aus, um Ereignishandler für die ausgewählte Project Web App-instance hinzuzufügen oder zu löschen.

Siehe auch