Partager via


Procédure : Créer un assembly de proxy pour des services WCF (traduction automatique)

Dernière modification : jeudi 23 juin 2011

S’applique à : Office 2010 | Project 2010 | Project Server 2010 | SharePoint Server 2010

Important

Cet article a été traduit automatiquement, voir l’avertissement. Vous pouvez consulter la version en anglais de cet article ici.

Dans le développement d’applications pour Microsoft Project Server 2010, la définition d’une référence à un service WCF (Windows Communication Foundation) dans l’interface PSI (Project Server Interface) peut être faite à l’aide d’un assembly de proxy ou d’un fichier de code source de proxy. Le Kit de développement logiciel (SDK) Project 2010 comprend l’assembly et la source de proxy PSI pour les services WCF dans la version disponible de Project Server 2010. Cet article montre comment créer un assembly de proxy PSI pour des Service Packs ou des mises à jour de Project Server.

Le présent article contient les sections suivantes :

  • Génération d'un Assembly de Proxy PSI

    • Procédure générale

    • Modifications de l'authentification des demandes de remboursement, les liaisons de Service et les points de terminaison

    • Utilisez le fichier Web.config temporaire

    • En utilisant le Script GenWCFProxyAssembly.cmd

Conditions préalables requises

Utiliser une installation d'essai de Project Server 2010.

Avertissement

Les procédures décrites dans cet article requièrent modifiant temporairement le fichier web.config de l'application de Service de partage de Project Server. Ces procédures doivent être effectuées que sur une installation d'essai de Project Server 2010.

Génération d'un Assembly de Proxy PSI

Vous pouvez créer et utiliser l'assembly de proxy ProjectServerServices.dll pour tous les services WCF dans la PSI, en utilisant le script GenWCFProxyAssembly.cmd dans le dossier Documentation\Intellisense\WCF de la Project 2010 de téléchargement du Kit de développement.

Notes

Si vous utilisez le script GenASMXProxyAssembly.cmd dans le dossier Documentation\Intellisense\WSDL pour générer l'assembly de proxy ProjectServerServices.dll, il ne fonctionne pas pour les applications WCF. Le script de GenASMXProxyAssembly.cmd appelle wsdl.exe, ce qui génère des fichiers de code source pour les services Web ASMX.

L'assembly de proxy basés sur ASMX n'inclut pas les attributs nécessaires, l'interface de canal ou la classe de client pour chaque service PSI. Par exemple, le service WCF de ressources inclut l'interface ResourceChannel et la classe de ResourceClient, le service Web ASMX de ressources n'inclut pas.

Procédure générale

Le script GenWCFProxyAssembly.cmd génère des fichiers de sortie pour les services WCF dans le programme PSI et compile ensuite l'assembly. Pour exécuter le script sur une installation d'essai de Project Server, effectuez les opérations suivantes :

  1. Faites une copie du fichier web.config pour l'application de Service du projet principal dans [Program Files]\Microsoft Office Servers\14.0\WebServices\Shared\ProjectServer\PSI.

  2. Copiez le fichier web.config.RTM_4RefOnly.txt du sous-répertoire Documentation\Intellisense\web.config.files dans le Project 2010 SDK télécharger au répertoire de l'application de Service de projet principal et puis renommez le fichier web.config.

  3. Dans une fenêtre d'invite de commandes , exécutez iisreset.

  4. Exécutez GenWCFProxyAssembly.cmd. Après avoir exécuté le script, restaurez le fichier web.config d'origine.

  5. Exécutez iisreset à nouveau.

Modifications de l'authentification des demandes de remboursement, les liaisons de Service et les points de terminaison

Dans la version bêta de Project Server 2010, l'authentification basée sur les revendications utilisées cryptage avec la sécurité de flux de données de ligne d'abonné sécurisé (SSL). Cependant, le cryptage requis trop surcharge pour chaque appel au serveur.

Dans la version finale, l'authentification basée sur les revendications utilise des liaisons personnalisées nommées ClaimsHttpFast et ClaimsHttpSecurity, qui n'utilisent pas le cryptage ou la liaison de sécurité HTTPS. La liaison personnalisée améliore considérablement le débit pour les messages signés. Toutefois, les métadonnées (MEX Exchange) n'utilisent pas de points de terminaison de l'application de service de Project Server et d'autres applications de service en Microsoft SharePoint Server 2010 les messages signés. Par conséquent, lorsque vous tentez de définir une référence à un service back-end, ou utiliser une URL de navigation tels que https://localhost:32843/1712e91aeb884cdfb437299b89de3443/psi/project.svc, le message est bloqué. Le service renvoie l'erreur suivante :

The service encountered an error.

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a policy export extension.
Extension: System.ServiceModel.Channels.TransportSecurityBindingElement
Error: Security policy export failed.

Dans la version finale de Project Server 2010, points de terminaison de service définis dans le fichier web.config utilisent des liaisons personnalisées. Par exemple, la liaison et le point de terminaison pour les résultats du service de projet dans une erreur InvalidOperationException lorsque vous essayez de définir un service suivant référencent.

<customBinding>
    <binding name="ClaimsHttpFast">
        <security authenticationMode="IssuedTokenOverTransport"
            allowInsecureTransport="true" />
    . . .
    </binding>
</customBinding>
. . .
<service
    name="Microsoft.Office.Project.Server.Wcf.Implementation.ProjectImpl"
    behaviorConfiguration="ProjectServerBehavior" >
    . . .
    <endpoint
      address=""
      binding="customBinding"
      behaviorConfiguration="ProjectServerEndpointBehavior"
      bindingConfiguration="ClaimsHttpFast"
      contract="Microsoft.Office.Project.Server.Interfaces.IProject" />
    <endpoint
</service>

Utilisez le fichier Web.config temporaire

Dans le fichier web.config.RTM_4RefOnly.txt, les services utilisent des enfants de l'élément basicHttpBindingClaimsHttpSecurity et ClaimsHttpFast. L'élément customBinding entière est commenté. Chacun des points de terminaison de service utilise l'élément basicHttpBinding, plutôt que l'élément customBinding. Ces modifications permettent à Visual Studio définir directement une référence de service sans erreur.

Voici l'élément bindings complète dans le fichier web.config.RTM_4RefOnly.txt :

<bindings>
  <basicHttpBinding>
    <binding name="mexHttpBinding">
      <security mode="None">
      </security>
    </binding>
    <binding name="ClaimsHttpSecurity">
      <security mode="None" >
      </security>
    </binding>
    <binding name="ClaimsHttpFast">
      <security mode="None">
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Voici l'élément service complètes pour le service du projet. Les points de terminaison pour ClaimsHttpSecurity et ClaimsHttpFast utilisent l'élément basicHttpBinding, au lieu de l'élément customBinding.

<service
  name="Microsoft.Office.Project.Server.Wcf.Implementation.ProjectImpl"
  behaviorConfiguration="ProjectServerBehavior" >
  <endpoint
    address="secure"
    binding="basicHttpBinding"
    bindingConfiguration="ClaimsHttpSecurity"
    behaviorConfiguration="ProjectServerEndpointBehavior"
    contract="Microsoft.Office.Project.Server.Interfaces.IProject" />
  <endpoint
    address=""
    binding="basicHttpBinding"
    behaviorConfiguration="ProjectServerEndpointBehavior"
    bindingConfiguration="ClaimsHttpFast"
    contract="Microsoft.Office.Project.Server.Interfaces.IProject" />
  <endpoint
    address="mex"
    binding="basicHttpBinding"
    bindingConfiguration="mexHttpBinding"
    name="mex"
    contract="IMetadataExchange" />
</service>

Vous pouvez utiliser la discussion précédente pour créer un fichier web.config temporaire pour l'application du Service de projet principal, une modification manuelle peut introduire des erreurs. Les définitions de liaison pour les deux points de terminaison revendications doivent être modifiées pour chaque service. Nous vous recommandons de copier le fichier web.config.RTM_4RefOnly.txt dans le téléchargement du Kit de développement et de l'utiliser pour le fichier web.config temporaire.

En utilisant le Script GenWCFProxyAssembly.cmd

Voici le script GenWCFProxyAssembly.cmd, comme dans le dossier Documentation\Intellisense\WCF du téléchargement SDK. Vous pouvez utiliser wsdl.exe à partir de n'importe quel emplacement ; ils sont les mêmes versions.

Avant d'utiliser le script, modifiez le nom GUID de l'annuaire d'application de Service de Project Server.

@echo off
@ECHO ------------------------------------------------------
@ECHO Creating the C# files for the WCF-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 VDIR1=https://ServerName/ProjectServerName/_vti_bin/PSI)

REM ** Replace the GUID for your Project Server Service virtual directory name. **
(set VDIR2=https://localhost:32843/1712e91aeb884cdfb437299b89de3443/PSI)

(set OUTDIR=.\Source)

REM ** Wsdl.exe is the same version in the v6.0A and v7.0A subdirectories. 
(set WSDL="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\x64\wsdl.exe")

if not exist %OUTDIR% (
    md %OUTDIR%
)

REM Use the back-end Project Service application URL for the WCF services.
REM ** The following command is all on one line.

for /F %%i in (Classlist_WCF.txt) do svcutil.exe /tcv:Version35 /serializer:XmlSerializer 
    /nologo /t:code /l:CS /n:*,WebSvc%%i /d:.\Source /o:wcf.%%i.cs %VDIR2%/%%i.svc

REM Use the front-end Project Web App URL for the LoginForms and LoginWindows services.

%WSDL% /nologo /l:CS /namespace:WebSvcLoginForms /out:%OUTDIR%\wsdl.LoginForms.cs %VDIR1%/LoginForms.asmx 
%WSDL% /nologo /l:CS /namespace:WebSvcLoginWindows /out:%OUTDIR%\wsdl.LoginWindows.cs %VDIR1%/LoginWindows.asmx

@ECHO ----------------------------
@ECHO Compiling the proxy assembly
@ECHO ----------------------------

(set SOURCE=%OUTDIR%\)
(set CSC=%WINDIR%\Microsoft.NET\Framework\v3.5\csc.exe)
(set ASSEMBLY_NAME=ProjectServerServices.dll)

%CSC% /t:library /out:%ASSEMBLY_NAME% %SOURCE%*.cs

Le script utilise le fichier Classlist_wcf.txt qui contient la liste des services PSI sont disponibles pour les développeurs tiers.

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

Les espaces de noms arbitraires créées pour les services Web ASMX et les services WCF sont les mêmes, afin que le fichier ProjectServerServices.xml pour Intellisense fonctionne avec les deux versions. Par exemple, l'espace de noms du service des ressources dans l'assembly de proxy basée sur WCF et dans l'assembly de proxy basés sur ASMX est SvcResource. Vous pouvez bien sûr, modifier le nom de l'espace de noms dans le paramètre \n pour la commande SvcUtil.exe dans le script GenWCFProxyAssembly.cmd — si vous vous assurer que les noms correspondent dans l'assembly de proxy et dans le fichier ProjectServerServices.xml.

Notes

Avertissement traduction automatique : cet article a été traduit par un ordinateur, sans intervention humaine. Microsoft propose cette traduction automatique pour offrir aux personnes ne maîtrisant pas l’anglais l’accès au contenu relatif aux produits, services et technologies Microsoft. Comme cet article a été traduit automatiquement, il risque de contenir des erreurs de grammaire, de syntaxe ou de terminologie.

Voir aussi

Concepts

Vue d’ensemble de WCF et de l’interface PSI (traduction automatique)

Conditions préalables pour les exemples de code basés sur WCF (traduction automatique)

Conditions préalables pour les exemples de code basés sur ASMX (traduction automatique)