Freigeben über


Voraussetzungen für WCF-basierte Codebeispiele in Project

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

Viele der WCF-basierten Codebeispiele, die in der Project Server 2013-Klassenbibliothek und Webdienstreferenz enthalten sind, wurden ursprünglich für die Project 2010-Entwicklerdokumentation erstellt und verwenden ein Standardformat für WCF-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.

Codebeispiele in der Project 2013-Entwicklerdokumentation, die von den für Office Project Server 2007 entwickelten Beispielen unverändert sind, verwenden ASMX-Webdienste. Die ASMX-basierten Beispiele können auch an die Verwendung von WCF-Diensten angepasst werden. In diesem Artikel wird gezeigt, wie Sie die Beispiele mit WCF-Diensten verwenden. Informationen zur Verwendung der Beispiele mit ASMX-Webdiensten finden Sie unter Voraussetzungen für ASMX-basierte Codebeispiele in Project.

Hinweis

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.

Vor dem Ausführen der Codebeispiele müssen Sie die Entwicklungsumgebung einrichten, die Anwendung konfigurieren, eine Dienstkonfigurationsdatei hinzufügen (oder die WCF-Dienste programmgesteuert konfigurieren) und generische Konstantenwerte an Ihre Umgebung anpassen.

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 Entwicklerdokumentationsthema 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 WCF-Dienste 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-Dienste erfordern, dass Sie eine PSI-Proxyassembly mit dem CompileWCFProxyAssembly.cmd Skript im Documentation\IntelliSense\WCF Unterverzeichnis im Project 2013 SDK-Download erstellen. Das Skript erstellt die WCF-basierte ProjectServerServices.dll Proxyassembly. Weitere Informationen finden Sie in der Datei [ReadMe_IntelliSense].mht im SDK-Download.

Erstellen der Anwendung und Hinzufügen eines Dienstverweises

  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 verweise hinzu, die für WCF erforderlich sind.

    Fügen Sie Projektmappen-Explorer einen Verweis auf System.ServiceModel hinzu (siehe Abbildung 1). Eine Webanwendung würde System.ServiceModel.Web verwenden.

    Fügen Sie außerdem einen Verweis auf System.Runtime.Serialization hinzu.

    Abbildung 1: Hinzufügen der Verweise in Visual Studio für eine WCF-basierte Anwendung

    Hinzufügen von Verweisen für WCF

  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 ReadResource weist beispielsweise den Namespace Microsoft.SDK.Project.Samples.CreateResourceTest auf. Wenn der Name des Visual Studio-Projekts ResourceTest lautet, kopieren Sie den Namespace aus der Program.cs Datei, und öffnen Sie dann den Bereich Eigenschaften des Projekts (wählen Sie im Menü Projekt die Option RessourceTesteigenschaften aus). Kopieren Sie auf der Registerkarte Anwendung den Namespace in das Textfeld Standardnamespace .

  5. Legen Sie die Dienstverweise fest.

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

    Es gibt drei Möglichkeiten, einen WCF-Dienstverweis hinzuzufügen:

Verwenden einer PSI-Proxyassembly und IntelliSense-Beschreibungen

Sie können eine Proxyassembly für alle öffentlichen WCF-Dienste in der PSI verwenden. Kompilieren Sie die ProjectServerServices.dll Proxyassembly mithilfe des Documentation\IntelliSense\WCF\CompileWCFProxyAssembly.cmd Skripts im Project 2013 SDK-Download, und kopieren Sie dann die Proxyassembly auf Ihren Entwicklungscomputer. Kopieren Sie die ProjectServerServices.xml-Datei für IntelliSense an denselben Speicherort. Legen Sie in Visual Studio einen Verweis auf die ProjectServerServices.dll-Proxyassembly fest.

Für Project Server-Service Packs und -Updates können Sie die Proxyquelldateien aktualisieren und eine neue Proxyassembly erstellen, indem Sie das GenWCFProxyAssembly.cmd Skript im gleichen SDK-Downloadordner verwenden. Einen Link zum SDK-Download finden Sie in der Project 2013-Entwicklerdokumentation. Weitere Informationen finden Sie im Abschnitt Hinzufügen einer Dienstreferenz .

Hinweis

Wenn Sie die Proxyquelldateien aus der Source.zip-Datei extrahieren, sind die Dateien im Documentation\IntelliSense\WCF\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. Weitere Informationen finden Sie unter Hinzufügen einer Dienstreferenz.

Die Skripts im Documentation\IntelliSense\ASMX Ordner funktionieren nicht für WCF-basierte Anwendungen. Das GenASMXProxyAssembly.cmd Skript ruft Wsdl.exe auf, das Quellcodedateien für die ASMX-Dienste generiert. Die ASMX-Proxydateien enthalten verschiedene Klassen und Eigenschaften. Der ASMX-basierte Ressourcenwebdienst enthält beispielsweise die Resource-Klasse , während der WCF-basierte Ressourcendienst die Resource-Schnittstelle , die ResourceChannel-Schnittstelle und die ResourceClient-Klasse enthält.

Die beliebigen Namespaces, die sowohl für die ASMX-Webdienste als auch für die WCF-Dienste erstellt wurden, sind identisch, sodass die ProjectServerServices.xml Datei für IntelliSense 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-Dienstnamespace 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.

Die Verwendung der WCF-basierten Proxyassembly hat folgende Vorteile:

  • Sie können die meisten Lösungen mit der Proxyassembly auf einem anderen Computer als dem Project Server-Computer entwickeln. Das Festlegen eines einzelnen Dienstverweises erfordert die Entwicklung auf dem Project Server-Computer.

  • Die Proxyassembly enthält alle PSI-Dienstnamespaces, sodass Sie nicht mehrere Proxydateien hinzufügen müssen.

  • Wenn Sie die ProjectServerServices.xml-Datei demselben Verzeichnis hinzufügen, in dem Sie einen Verweis auf die ProjectServerServices.dll Proxyassembly festlegen, können Sie IntelliSense-Beschreibungen für die PSI-Klassen und -Member abrufen. Weitere Informationen finden Sie in der Datei [ReadMe_IntelliSense] im Documentation\IntelliSense Ordner des Project 2013 SDK-Downloads.

Abbildung 2: Verwenden von IntelliSense für eine Methode im Ressourcendienst

Verwenden von IntelliSense für die ReadResource-Methode

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, um eine Proxyassembly zu erstellen, und die ProjectServerServices.xml IntelliSense-Datei so ändern, dass unterschiedliche Namespaces verwendet werden.

Hinzufügen einer PSI-Proxydatei

Der Project 2013 SDK-Download enthält die Quelldateien, die vom Befehl SvcUtil.exe für die Proxyassembly generiert werden. Die Quelldateien befinden sich in der Source.zip-Datei im Documentation\IntelliSense\WCF Unterverzeichnis. Anstatt einen Verweis auf die Proxyassembly festzulegen, können Sie einer Visual Studio-Projektmappe eine oder mehrere Quelldateien hinzufügen. Um beispielsweise den Project-Dienst und den Ressourcendienst zu verwenden, fügen Sie wcf hinzu. Project.cs und Wcf. Resource.cs Dateien in die Projektmappe ein.

In WCF wird die primäre Klasse in jedem PSI-Dienst durch eine Schnittstelle definiert und in einer Clientklasse für den Zugriff auf die Member implementiert. Beispielsweise wird die SvcProject.Resource-Schnittstelle in der SvcProject.ResourceClient-Klasse implementiert. Verwenden Sie beispielsweise den folgenden Code, um ein ResourceClient-Objekt als Klassenvariable mit dem Namen resourceClient zu definieren. Im Beispiel erstellt die SetClientEndpoints-Methode ein resourceClient-Objekt , das den basicHttp_Project-Endpunkt verwendet, der in der app.config-Datei definiert ist. Weitere Informationen zur app.config-Datei finden Sie im Abschnitt Hinzufügen einer Dienstkonfigurationsdatei .

private static SvcResource.ResourceClient resourceClient;
. . .
private static void SetClientEndpoints()
{
  resourceClient = new SvcResource.ResourceClient("basicHttp_Resource");
  . . .
}
public void DisposeClients()
{
  resourceClient.Close();
  . . .
}

Hinweis

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

Hinzufügen eines Serviceverweises

Wenn Sie die WCF-basierte Proxyassembly nicht verwenden oder keine Proxydatei für einen PSI-Dienst hinzufügen, können Sie einen oder mehrere einzelne Dienstverweise direkt in Visual Studio festlegen. Sie können auch Schritt 1 des folgenden Verfahrens verwenden, um aktualisierte Proxydateien zu erstellen, um das Documentation\IntelliSense\WCF\GenWCFProxyAssembly.cmd Skript vorzubereiten, das im Project 2013 SDK-Download enthalten ist.

Hinweis

Um einen Dienstverweis festzulegen, müssen Sie Visual Studio auf dem Project Server-Computer verwenden. Es wird empfohlen, die ProjectServerServices.dll Proxyassembly zu verwenden oder Proxyquelldateien hinzuzufügen, anstatt direkt Dienstverweise in Visual Studio hinzuzufügen.

Die folgenden Schritte zeigen, wie Sie einen Dienstverweis mithilfe von Visual Studio 2012 auf einem Computer festlegen, auf dem eine Testinstallation von Project Server ausgeführt wird:

  1. Um Zugriff auf die Back-End-WCF-Dienste zu erhalten, führen Sie Visual Studio auf dem Project Server-Computer aus.

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

  3. Geben Sie im Dialogfeld Dienstverweis hinzufügen im Textfeld Adresseden Namen GUID/psi/ ServiceName.svc ein><https://localhost:32843/, und drücken Sie dann die EINGABETASTE. Ersetzen Sie GUID durch den Namen des virtuellen Verzeichnisses der Project Server-Dienstanwendung, z. B. 534c37eb00d74ccfadcecf9827e95239. Ersetzen Sie ServiceName durch den Namen des Diensts, z. B. Resource (siehe Abbildung 3).

    Sie können den Namen des virtuellen Verzeichnisses des Project Server-Diensts auf eine der folgenden Arten abrufen:

    • Öffnen Sie die SharePoint 2013-Zentraladministrationsanwendung in Ihrem Browser. Wählen Sie Dienstanwendungen verwalten und dann die gewünschte Project Server PSI-Dienstanwendung aus. Wählen Sie beispielsweise ProjectServerService aus. Die URL der Seite Project Web App-Websites verwalten enthält den Namen des virtuellen Verzeichnisses. In lautet 534c37eb00d74ccfadcecf9827e95239 beispielsweise https://ServerName:8080/_admin/pwa/managepwa.aspx?appid=534c37eb-00d7-4ccf-adce-cf9827e95239der Name des virtuellen Verzeichnisses (der Verzeichnisname enthält keine Bindestriche).

    • Öffnen Sie das Dialogfeld Internetinformationsdienste-Manager (IIS) auf dem Project Server-Computer. Erweitern Sie im Bereich Connections den Knoten SharePoint-Webdienste, und erweitern Sie dann die darunter liegenden virtuellen Dienstverzeichnisse, bis Sie das Verzeichnis finden, das einen PSI-Ordner enthält. Wählen Sie das Verzeichnis aus, klicken Sie im Bereich Aktionen auf Erweiterte Einstellungen, und kopieren Sie dann den Verzeichnisnamen in das Feld Virtueller Pfad.

      Hinweis

      Es kann mehrere virtuelle Verzeichnisse des Project Server-Diensts geben. Stellen Sie sicher, dass Sie das virtuelle Verzeichnis auswählen, das die gewünschte Project Web App-instance enthält.

    • Verwenden Sie das Cmdlet get-SPServiceApplication in Windows PowerShell, das mit SharePoint 2013 installiert wird. Wählen Sie im Startmenü der Taskleiste Alle Programme, dann Microsoft SharePoint 2013-Produkte und dann SharePoint 2013-Verwaltungsshell aus. Im Folgenden finden Sie den Befehl und die Ergebnisse im SharePoint 2013get- Management Shell-Fenster für die definierten Dienstanwendungen (Ihre GUIDs unterscheiden sich). Kopieren Sie die GUID für die Project Server-Dienstanwendung.

          PS > get-SPServiceApplication
          DisplayName          TypeName             Id
          -----------          --------             --
          State Service        State Service        04041cfa-4ab3-4473-8bc8-3967b02eff39
          ProjectServerSer...  Project Server PS... 534c37eb-00d7-4ccf-adce-cf9827e95239
          Security Token Se... Security Token Se... 7243732e-edea-405d-8cc8-1716b99faef5
          Application Disco... Application Disco... 3bfbdeb0-bc20-4a21-801c-cc6f1ce6c643
          SharePoint Server... SharePoint Server... 09912f49-3b72-462f-a44c-6533b578286a  
      

      Wenn Sie den vollständigen Namen der Project Server-Dienstanwendung kennen, können Sie ihn verwenden, um den GUID-Wert abzurufen, z. B.:

      PS > $projectService = "ProjectServerService"
      PS > (get-SPServiceApplication -Name $projectService).Id
      Guid
      ----
      534c37eb-00d7-4ccf-adce-cf9827e95239
      

      Hinweis

      Entfernen Sie die Bindestriche in der GUID, um den Namen des virtuellen Verzeichnisses abzurufen.

    URLs wie https://localhost:32843/534c37eb00d74ccfadcecf9827e95239/PSI/Resource.svc sind Standard für Project Server-Dienste.

  4. Nachdem der Dienstverweis aufgelöst wurde, geben Sie den Verweisnamen in das Textfeld Namespace ein. Codebeispiele in der Project 2013-Entwicklerdokumentation verwenden den beliebigen Namespacenamen Svc ServiceName. Der Ressourcendienst in den Codebeispielen heißt z. B. SvcResource.

    Abbildung 3: Hinzufügen des WCF-basierten Ressourcendienstverweises

    Hinzufügen des WCF-basierten Ressourcendienstverweises

  5. Ersetzen Sie die temporäre web.config Datei im Project Service-Verzeichnis durch das Original (umbenannt in web.config), und führen Sie dann erneut aus iisreset.

Festlegen anderer Verweise

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

Lokale Verweise für das Codebeispiel werden 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 gewünschten DLLs und dann OK aus.

Hinweis

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

Hinzufügen einer Dienstkonfigurationsdatei

Wenn eine Anwendung die WCF-Dienste programmgesteuert konfiguriert, verwendet sie keine Dienstkonfigurationsdatei. Andernfalls verwendet eine Windows-Anwendung oder Konsolenanwendung das System.serviceModel-Element in einer app.config-Datei. eine Webanwendung enthält system.serviceModel in web.config. Weitere Informationen zum Verwenden einer app.config-Datei oder zum programmgesteuerten Konfigurieren der WCF-Dienste finden Sie unter Exemplarische Vorgehensweise: Entwickeln von PSI-Anwendungen mit WCF.

Wenn eine Dienstproxyquelldatei generiert wird, erstellt der Befehl SvcUtil.exe auch eine output.config-Datei, die die Grundlage für das Standardelement system.serviceModel in einer app.config-Datei oder web.config-Datei darstellt. Der Project 2013 SDK-Download enthält ein Beispiel output.config Datei in Documentation\IntelliSense\WCF\Source.zip. Die standardmäßige output.config datei, die SvcUtil.exe für den Ressourcendienst erstellt, enthält z. B. zwei Bindungen mit dem Namen BasicHttpBinding_Resource und BasicHttpBinding_Resource1. Das Clientelement enthält zwei Standardendpunkte. Ein Endpunkt ist für den sicheren Zugriff auf die HTTP-Adresse an Port 32843 und der andere für den normalen Zugriff auf Port 32843, wie folgt:

<client>
    <endpoint address="https://ServerName.domain:32843/GUID/PSI/Resource.svc/secure"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource" />
address="https://ServerName.domain:32843/GUID/PSI/Resource.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource1"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource1" />
</client>

Die PSI-Dienstkonfiguration verwendet nicht die Standardbindungen und Endpunkte. Project Server erfordert, dass Anwendungen auf PSI-Dienste über das Front-End ProjectServer.svc zugreifen, das als Router für Aufrufe der Back-End-Dienste fungiert. Führen Sie die folgenden Schritte aus, um die app.config-Datei zu erstellen:

  1. Wenn Sie einen Verweis auf die ProjectServerServices.dll Proxyassembly festlegen oder die Proxyquelldatei für einen Dienst hinzufügen, enthält die Anwendung keine app.config-Datei. Fügen Sie dem Visual Studio-Projekt ein neues Element hinzu. Wählen Sie im Dialogfeld Neues Element hinzufügen die Vorlage Anwendungskonfigurationsdatei aus, benennen Sie sie app.config, und wählen Sie dann Hinzufügen aus.

  2. Löschen Sie den gesamten Text in der app.config-Datei, und kopieren Sie dann den folgenden Code in die Datei. Sie können dieselbe Bindung verwenden, z. B basicHttpConf. für jeden Dienstendpunkt. Wenn Sie mehr als eine Bindung verwenden möchten, z. B. zum Binden von HTTP- und HTTPS-Protokollen, müssen Sie für jedes Protokoll eine Bindung erstellen.

        <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <system.serviceModel>
                <behaviors>
                    <endpointBehaviors>
                        <behavior name="basicHttpBehavior">
                            <clientCredentials>
                                <windows allowedImpersonationLevel="Impersonation" />
                            </clientCredentials>
                        </behavior>
                    </endpointBehaviors>
                </behaviors>
                <bindings>
                    <basicHttpBinding>
                        <binding name="basicHttpConf" sendTimeout="01:00:00" 
                            maxBufferSize="500000000" maxReceivedMessageSize="500000000">
                            <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                                maxArrayLength="16384" maxBytesPerRead="4096" 
                                maxNameTableCharCount="500000000" />
                            <security mode="TransportCredentialOnly">
                                <transport clientCredentialType="Ntlm" realm="https://SecurityDomain" />
                            </security>
                        </binding>
                    </basicHttpBinding>
                </bindings>
                <client>
                    <endpoint address="https://ServerName/ProjectServerName/_vti_bin/PSI/ProjectServer.svc"
                        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
                        bindingConfiguration="basicHttpConf" 
                        contract="SvcServiceName.ServiceName"
                        name="basicHttp_ServiceName" />
                </client>
            </system.serviceModel>
        </configuration>
    
  3. Ersetzen Sie ServerName/ProjectServerName in der Clientendpunktadresse durch den Namen Ihres Servers und der Project Web App-instance.

  4. Ersetzen Sie durch ServiceName den Namen des PSI-Diensts, z. B. Ressource. Stellen Sie sicher, dass Sie alle drei Instanzen des Dienstnamens ersetzen, z. B.:

        <endpoint address="https://myserver/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcResource.Resource"
            name="basicHttp_Resource" />
    
  5. Um mehr als einen PSI-Dienst zu verwenden, erstellen Sie ein Endpunktelement für jeden Dienst und für jedes Bindungselement , das dieser Dienst verwendet. Die folgenden Endpunkte konfigurieren den Client beispielsweise so, dass er die grundlegende HTTP-Bindung für den Project-Dienst und den QueueSystem-Dienst verwendet.

    Hinweis

    Wenn Sie eine Anwendung ausführen und eine Fehlermeldung erhalten, dass der Server zu ausgelastet ist oder die HTTP-Anforderung nicht autorisiert ist, stellen Sie sicher, dass die Endpunktadressen in der app.config-Datei korrekt sind.

        <client>
        <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcProject.Project"
            name="basicHttp_Project" />
        <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcQueueSystem.QueueSystem"
            name="basicHttp_QueueSystem" />
        </client>
    

Sie können eine app.config Datei bearbeiten, indem Sie den WCF-Dienstkonfigurations-Editor in Visual Studio (im Menü Extras) verwenden. Abbildung 4 zeigt, wie das Vertragselement im Dialogfeld Microsoft Service Configuration Editor festgelegt wird. Wenn die Projektmappe die PSI-Proxyassembly verwendet, öffnen Sie ProjectServerServices.dll im bin\debug Verzeichnis der Visual Studio-Projektmappe. Im Dialogfeld Vertragstypbrowser werden alle WCF-Dienstverträge angezeigt (siehe Abbildung 5).

Abbildung 4: Verwenden des WCF-Dienstkonfigurations-Editors

Verwenden der WCF-Dienstkonfiguration Editor

Wenn die Lösung eine Dienstproxydatei verwendet, z. B. wcfResource.cs, kompilieren Sie die Anwendung, und öffnen Sie dann die ausführbare Datei im bin\debug Verzeichnis. Weitere Informationen zum Bearbeiten der app.config-Datei finden Sie unter Exemplarische Vorgehensweise: Entwickeln von PSI-Anwendungen mit WCF.

Abbildung 5: Verwenden des Vertragstypbrowsers im WCF-Dienstkonfigurations-Editor

Verwenden des Vertragstypbrowsers

Verwenden mehrerer Authentifizierungen

Die Authentifizierung lokaler Project Server-Benutzer erfolgt über Windows-Authentifizierung- oder Formularauthentifizierung über die Anspruchsverarbeitung in SharePoint. 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 jeder Aufruf eines WCF-Diensts, 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. For more information about the error, either turn on Include ExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.

Um das Problem für WCF zu beheben, sollten sich alle Aufrufe von PSI-Methoden in einem OperationContextScope befinden, der für jeden PSI-Dienst definiert ist. Schachteln Sie keine Bereiche für mehrere Dienste. Wenn Sie beispielsweise Aufrufe der Dienste Resource und Project verwenden, sollte sich jeder Aufrufsatz innerhalb seines eigenen Bereichs befinden.

Im folgenden Beispiel kann die DisableFormsAuth-Methode aus jedem OperationContextScope-Abschnitt in einer Anwendung aufgerufen werden. Die -Methode entfernt alle Headerwerte, die zuvor die Formularauthentifizierung deaktiviert haben, sodass die Formularauthentifizierung fortgesetzt werden kann, wenn der isWindowsAuth-Parameterfalse ist. Wenn isWindowsAuthtrue ist, deaktiviert die DisableFormsAuth-Methode die Formularauthentifizierung.

In der WcfSample-Methode ist das projectClient-Objekt ein instance der PSI SvcProject.ProjectClient-Klasse.

// Class variable that determines whether to disable Forms authentication.
private bool isWindowsUser = true;
public void DisableFormsAuth(bool isWindowsAuth)
{
    WebOperationContext.Current.OutgoingRequest.Headers.Remove(
        "X-FORMS_BASED_AUTH_ACCEPTED");
    if (isWindowsAuth)
    {
        // Disable Forms authentication, to enable Windows authentication.
        WebOperationContext.Current.OutgoingRequest.Headers.Add(
            "X-FORMS_BASED_AUTH_ACCEPTED", "f");
    }
}
private void WcfSample()
{
    // Limit the scope of WCF calls to the client channel. 
    using (OperationContextScope scope = new OperationContextScope(projectClient.InnerChannel))
    {
        // Add a web request header to enable Windows authentication in 
        // multiple authentication installations.
        DisableFormsAuth(isWindowsUser);
        // Add calls to the projectClient methods here:
        // . . .
    }
}

Hinweis

Psi-Aufrufe in einem OperationContextScope sind nur für Anwendungen erforderlich, die in einer Umgebung mit mehreren Authentifizierungen ausgeführt werden. Wenn Project Server nur Windows-Authentifizierung verwendet, ist es nicht erforderlich, einen Bereich festzulegen und einen Webanforderungsheader hinzuzufügen, der die Formularauthentifizierung deaktiviert.

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

Ändern von Werten 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 Projektserverwebsite, z. B. PWA.

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

Alle anderen Variablen, die Sie ändern müssen, werden oben im Codebeispiel 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 einer Project Server-Datenbank auszuführen. Verwenden Sie beispielsweise die folgende Abfrage, um die obersten 200 Zeilen der MSP_WORKFLOW_STAGE_PDPS Tabelle auszuwählen, 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 nach dem Ausführen von Codebeispielen für typische Bereinigungsaktivitäten verwendet werden 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