Share via


Requisitos previos de muestras de código basadas en WCF en Project

Obtenga información para ayudarle a crear proyectos en Visual Studio mediante los ejemplos de código basados en WCF que se incluyen en los temas de referencia de La interfaz de Project Server (PSI).

Muchos de los ejemplos de código basados en WCF incluidos en la biblioteca de clases de Project Server 2013 y la referencia de servicio web se crearon originalmente para la documentación para desarrolladores de Project 2010 y usan un formato estándar para los servicios web wcf. Los ejemplos siguen funcionando en Project Server 2013 y están diseñados para copiarse en una aplicación de consola y ejecutarse como una unidad completa. Las excepciones están señaladas en la muestra.

Los ejemplos de código de la documentación para desarrolladores de Project 2013 que no cambian con respecto a los ejemplos desarrollados para Office Project Server 2007 usan servicios web ASMX. Las muestras basadas en ASMX también pueden adaptarse para utilizar servicios de WCF. Este artículo muestra cómo utilizar las muestras con servicios de WCF. Para obtener información sobre cómo usar los ejemplos con servicios web ASMX, consulte Requisitos previos para ejemplos de código basados en ASMX en Project.

Nota:

Si el modelo de objeto de cliente (CSOM) incluye los métodos que su aplicación necesita, deberían desarrollarse nuevas aplicaciones con el CSOM. El CSOM permite a las aplicaciones trabajar con Project Online o una instalación local de Project Server 2013. De lo contrario, si su aplicación usa la PSI, debería usar la interfaz de WCF, que es la tecnología que recomendamos para las comunicaciones de red. Las aplicaciones que usan la interfaz ASMX o la interfaz WCF solo pueden funcionar para instalaciones locales de Project Server 2013.

Para obtener más información sobre el CSOM, vea Arquitectura de Project Server 2013 y Modelo de objetos del lado cliente (CSOM) para Project 2013.

Antes de ejecutar las muestras de código, debe configurar el entorno de desarrollo, configurar la aplicación y agregar un archivo de configuración de servicio (o configurar los servicios de WCF de forma programada) y cambiar valores constantes genéricos para que coincidan con su entorno.

Configuración del entorno de desarrollo

  1. Configurar un sistema de Project Server de prueba.

    Use un sistema de Project Server de prueba siempre que haga un desarrollo o una prueba. Incluso cuando su código funcione perfectamente, las dependencias entre proyectos, los informes u otros factores de entorno pueden generar consecuencias no esperadas.

    Nota:

    Asegure que es un usuario válido en el servidor y compruebe que posee los permisos suficientes para las llamadas de la PSI que utilice su aplicación. El tema de la documentación de desarrollador para cada método de PSI incluye una tabla de permisos de Project Server. Por ejemplo, el método Project.QueueCreateProject requiere el permiso global NewProject y el permiso SaveProjectTemplate .

    En algunos casos, quizás deba hacer una depuración remota en el servidor. También puede que tenga que configurar un controlador de eventos instalando un ensamblado de controlador de eventos en cada equipo de Project Server de la granja de SharePoint y, a continuación, configurando el controlador de eventos para la instancia de Project Web App mediante la página Configuración de Project Server de la Configuración general de la aplicación de Administración central de SharePoint.

  2. Configurar un PC de desarrollo.

    Generalmente obtiene acceso a la PSI a través de una red. Las muestras de código están diseñadas para usarse en un cliente independiente del servidor, excepto cuando se indique lo contrario.

    1. Instale la versión correcta de Visual Studio. Excepto cuando se lo especifique, las muestras de código se escriben en Visual C#. Se pueden usar con Visual Studio 2010 o Visual Studio 2012. Asegúrese de tener instalado el Service Pack más reciente.

    2. Copie los DLL de Project Server en el PC de desarrollo. Copie los siguientes ensamblados del equipo de [Program Files]\Microsoft Office Servers\15.0\Bin Project Server en el equipo de desarrollo:

      • Microsoft.Office.Project.Server.Events.Receivers.dll

      • Microsoft.Office.Project.Server.Library.dll

    3. Para obtener información sobre cómo compilar y utilizar el ensamblado de proxy ProjectServerServices.dll para los servicios de WCF en la PSI, consulte Uso de un ensamblado de proxy de PSI y descripciones de IntelliSense.

  3. Instalar los archivos de IntelliSense.

    Para usar descripciones de IntelliSense para clases y miembros en ensamblados de Project Server, copie los archivos XML de IntelliSense actualizados de la descarga del SDK de Project 2013 en el mismo directorio donde se encuentran los ensamblados de Project Server. Por ejemplo, copie el archivo Microsoft.Office.Project.Server.Library.xml al directorio donde su aplicación establecerá una referencia al ensamblado Microsoft.Office.Project.Server.Library.dll.

    Las descripciones de IntelliSense para los servicios psi requieren que cree un ensamblado de proxy PSI mediante el script de CompileWCFProxyAssembly.cmd en el Documentation\IntelliSense\WCF subdirectorio de la descarga del SDK de Project 2013. La secuencia de comandos crea el ensamblado de proxy ProjectServerServices.dll basado en WCF. Para obtener más información, consulte el archivo [ReadMe_IntelliSense].mht en la descarga de SDK.

Crear la aplicación y agregar una referencia de servicio

  1. Crear una aplicación de consola.

    Cuando crea una aplicación de consola, en la lista desplegable del cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 4. Puede copiar el código de ejemplo de PSI en la nueva aplicación.

  2. Agregar referencias requeridas para WCF.

    En Solution Explorer, agregue una referencia a System.ServiceModel (consulte Figura 1). Una aplicación web utilizaría System.ServiceModel.Web.

    También agregue una referencia a System.Runtime.Serialization.

    Figura 1. Agregar las referencias en Visual Studio para una aplicación basada en WCF

    Adición de referencias para WCF

  3. Copiar el código.

    Copie el ejemplo de código completo en el archivo Program.cs de la aplicación de consola.

  4. Establecer el espacio de nombre para la aplicación de muestra.

    Puede cambiar el espacio de nombres que aparece en la parte superior de la muestra por el espacio de nombres predeterminado de la aplicación o bien cambiar el espacio de nombres de la aplicación predeterminado para que coincida con la muestra. Puede cambiar el espacio de nombres de la aplicación predeterminado modificando las propiedades de la aplicación.

    Por ejemplo, el ejemplo de código de ReadResource tiene el espacio de nombres Microsoft.SDK.Project.Samples.CreateResourceTest. Si el nombre del proyecto de Visual Studio es ResourceTest, copie el espacio de nombre desde el archivo Program.cs y, a continuación, abra el panel Propiedades del proyecto (en el menú Proyecto, elija Propiedades de ResourceTest). En la ficha Aplicación, copie el espacio de nombre en el cuadro de texto Espacio de nombre predeterminado.

  5. Establecer las referencias de servicio.

    Muchos ejemplos requieren una referencia a uno o más de los servicios de la PSI. Estos aparecen en la muestra misma o en comentarios que preceden a la muestra. Para obtener el espacio de nombre correcto de las referencias de servicio, asegúrese de establecer primero el espacio de nombre de la aplicación predeterminado.

    Existen tres maneras de agregar una referencia de servicio de WCF:

Uso de un ensamblado de proxy de PSI y de descripciones de IntelliSense

Puede utilizar un ensamblado de proxy para todos los servicios de WCF en la PSI. Compile el ensamblado de proxy ProjectServerServices.dll mediante el Documentation\IntelliSense\WCF\CompileWCFProxyAssembly.cmd script de la descarga del SDK de Project 2013 y, a continuación, copie el ensamblado de proxy en el equipo de desarrollo. Copie el archivo ProjectServerServices.xml para IntelliSense en la misma ubicación. En Visual Studio, establezca una referencia al ensamblado de proxy ProjectServerServices.dll.

Para las actualizaciones y los Service Packs de Project Server, puede actualizar los archivos de origen de proxy y crear un nuevo ensamblado de proxy utilizando la secuencia de comando GenWCFProxyAssembly.cmd en la misma carpeta de descarga de SDK. Para obtener un vínculo a la descarga del SDK, consulte la documentación para desarrolladores de Project 2013. Para obtener más información, consulte la sección Agregar una referencia de servicio.

Nota:

Al extraer los archivos de origen del proxy del archivo Source.zip, los archivos de la Documentation\IntelliSense\WCF\Source carpeta son actuales a partir de la fecha de publicación de la descarga del SDK de Project 2013. Para generar archivos de origen de proxy de PSI actualizados, ejecute la secuencia de comando GenASMXProxyAssembly.cmd en el equipo de Project Server. Para obtener más información, consulte Agregar una referencia de servicio.

Los scripts de la Documentation\IntelliSense\ASMX carpeta no funcionan para aplicaciones basadas en WCF. La secuencia de comandos The GenASMXProxyAssembly.cmd llama a Wsdl.exe, lo cual genera archivos de código de origen para los servicios ASMX. Los archivos de proxy de ASMX incluyen diferentes clases y propiedades. Por ejemplo, el servicio web de Recurso basado en ASMX incluye la clase de Resource, mientras que el servicio de Recurso basado en WCF incluye la interfaz de Resource, la interfaz de ResourceChannel y la clase de ResourceClient.

Los espacios de nombre arbitrarios creados tanto para los servicios web de ASMX como para los servicios de WCF son los mismos, de manera que el archivo ProjectServerServices.xml para IntelliSense funciona con ambos ensamblados. Por ejemplo, el espacio de nombre del servicio Recurso en el ensamblado de proxy basado en WCF y en el ensamblado de proxy basado en ASMX es SvcResource. Por supuesto, puede modificar los nombres de los espacios de nombre, si se asegura de que coinciden en el ensamblado de proxy y en el archivo ProjectServerServices.xml de IntelliSense.

Si una muestra de código utiliza un nombre diferente para un espacio de nombre de servicio de PSI, por ejemplo ProjectWebSvc, para que funcione IntelliSense debe cambiar la muestra para que utilice SvcProject de manera que el espacio de nombre coincida con el ensamblado de proxy.

Algunas ventajas del uso del ensamblado de proxy basado en WCF son las siguientes:

  • Puede desarrollar la mayoría de las soluciones con el ensamblado de proxy en un equipo distinto del equipo de Project Server. Establecer una referencia de servicio individual requiere desarrollo en el equipo de Project Server.

  • El ensamblado de proxy incluye todos los espacios de nombre de servicio de PSI, entonces no tiene que agregar varios archivos de proxy.

  • Si agrega el archivo ProjectServerServices.xml al mismo directorio donde estableció una referencia al ensamblado de proxy ProjectServerServices.dll, puede obtener descripciones de IntelliSense para los miembros y las clases de PSI. Para obtener más información, vea el archivo [ReadMe_IntelliSense] en la Documentation\IntelliSense carpeta de la descarga del SDK de Project 2013.

Figura 2. Uso de IntelliSense para acceder a un método en el servicio de Recurso

Uso de IntelliSense para el método ReadResource

Las desventajas de utilizar el ensamblado de proxy son que la solución es mayor y debe distribuir e instalar el ensamblado de proxy con la solución. También debe utilizar los mismos espacios de nombre que se encuentran en el ensamblado de proxy y los archivos de IntelliSense, a menos que cambie la secuencia de comandos para crear un ensamblado de proxy y cambie el archivo ProjectServerServices.xml de IntelliSense para utilizar distintos espacios de nombre.

Agregar un archivo de proxy de PSI

La descarga del SDK de Project 2013 incluye los archivos de origen generados por el comando SvcUtil.exe para el ensamblado de proxy. Los archivos de origen se encuentran en el archivo Source.zip en el Documentation\IntelliSense\WCF subdirectorio. En lugar de establecer una referencia al ensamblado de proxy, puede agregar uno o más archivos de origen a una solución de Visual Studio. Por ejemplo, para utilizar el servicio de Project y el servicio de Recurso, agregue los archivos wcf.Project.cs y wcf.Resource.cs a la solución.

En WCF, la clase primaria en cada servicio de PSI se define por una interfaz y se implementa en una clase de cliente para acceder a los miembros. Por ejemplo, la interfaz de SvcProject.Resource se implementa en la clase de SvcProject.ResourceClient. Para definir un objeto de ResourceClient como una variable de clase llamada resourceClient, por ejemplo, utilice el siguiente código. En el ejemplo, el método SetClientEndpoints crea un objeto de resourceClient que utiliza el extremo basicHttp_Project, que se define en el archivo app.config. Para obtener más información sobre el archivo app.config, consulte la sección Agregar un archivo de configuración de servicio.

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

Nota:

Si utiliza un ensamblado de proxy de PSI o agrega un archivo de proxy para una referencia de servicio de Project llamada SvcResource, utilizaría el mismo código para crear y descartar un objeto de resourceClient.

Adición de una referencia de servicio

Si no utiliza el ensamblado de proxy basado en WCF o agrega un archivo de proxy para un servicio de PSI, puede establecer una o más referencias de servicio individual directamente en Visual Studio. También puede usar el paso 1 del procedimiento siguiente para crear archivos proxy actualizados, a fin de prepararse para el Documentation\IntelliSense\WCF\GenWCFProxyAssembly.cmd script que se incluye en la descarga del SDK de Project 2013.

Nota:

Para establecer una referencia de servicio, debe utilizar Visual Studio en el equipo de Project Server. Recomendamos que utilice el ensamblado de proxy ProjectServerServices.dll o agregue archivos de origen de proxy, en lugar de agregar directamente referencias de servicio en Visual Studio.

En los pasos siguientes se muestra cómo establecer una referencia de servicio mediante Visual Studio 2012 en un equipo que ejecuta una instalación de prueba de Project Server:

  1. Para obtener acceso a los servicios de WCF back-end, ejecute Visual Studio en el equipo de Project Server.

  2. En Solution Explorer, haga clic con el botón secundario en la carpeta Referencias y, a continuación, seleccione Agregar referencia de servicio.

  3. En el cuadro de diálogo Agregar referencia de servicio , en el cuadro de texto Dirección , escriba <https://localhost:32843/>GUID/psi/ ServiceName.svc y, a continuación, presione Entrar. Reemplace GUID por el nombre del directorio virtual de la aplicación de servicio de Project Server, como 534c37eb00d74ccfadcecf9827e95239. Reemplace ServiceName por el nombre del servicio, como Resource (consulte la figura 3).

    Puede obtener el nombre del directorio virtual del servicio de Project Server de una de las siguientes maneras:

    • Abra la aplicación Administración central de SharePoint 2013 en el explorador. Elija Administrar aplicaciones de servicio y luego elija la aplicación de servicio de PSI de Project Server que desee. Por ejemplo, elija ProjectServerService. La dirección URL de la página Administrar sitios de Project Web App contiene el nombre del directorio virtual. Por ejemplo, en https://ServerName:8080/_admin/pwa/managepwa.aspx?appid=534c37eb-00d7-4ccf-adce-cf9827e95239, el nombre del directorio virtual es 534c37eb00d74ccfadcecf9827e95239 (el nombre del directorio no contiene guiones).

    • Abra el cuadro de diálogo Administrador de Servicios de información de internet (IIS) en el equipo de Project Server. Expanda el nodo Servicios web de SharePoint en el panel Conexiones y, a continuación, expanda los directorios virtuales de servicio debajo de eso, hasta que encuentra el directorio que incluye una carpeta de PSI. Seleccione el directorio, elija Configuración avanzada en el panel Acciones y, a continuación, copie el nombre del directorio en el campo Ruta virtual.

      Nota:

      Puede haber más de un directorio virtual de servicio de Project Server. Asegúrese de elegir el directorio virtual que contiene la instancia de Project Web App que desee.

    • Use el cmdlet get-SPServiceApplication en Windows PowerShell instalado con SharePoint 2013. En la barra de tareas del menú Inicio, elija Todos los programas, seleccione Productos de Microsoft SharePoint 2013 y, a continuación, elija SharePoint 2013 Management Shell. A continuación verá el comando y los resultados en la ventana de SharePoint 2013get- Management Shell para las aplicaciones de servicio definidas (sus GUID serán diferentes). Copie el GUID para la aplicación de servicio de Project Server.

          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  
      

      Si conoce el nombre completo de la aplicación de servicio de Project Server, puede utilizarlo para obtener el valor de GUID, por ejemplo:

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

      Nota:

      Elimine los guiones del GUID para obtener el nombre del directorio virtual.

    Las direcciones URL como https://localhost:32843/534c37eb00d74ccfadcecf9827e95239/PSI/Resource.svc son estándar para los servicios de Project Server.

  4. Una vez que se resuelve la referencia de servicio, escriba el nombre de la referencia en el cuadro de texto Espacio de nombre. Los ejemplos de código de la documentación para desarrolladores de Project 2013 usan el nombre arbitrario del espacio de nombres Svc ServiceName. Por ejemplo, el servicio Recurso en los ejemplos de código se llama SvcResource.

    Figura 3. Agregar la referencia de servicio de Recurso basada en WCF

    Adición de la referencia del servicio de recursos basado en WCF

  5. Reemplace el archivo de web.config temporal en el directorio de Project Service por el original (cuyo nombre se ha cambiado a web.config) y, a continuación, vuelva a ejecutar iisreset.

Estableciendo otras referencias

Las aplicaciones de Project Server suelen usar otros servicios, como los servicios web de SharePoint 2013. Si se requieren otros servicios u otras referencias, se lo señala en el ejemplo de código.

Las referencias locales para la muestra de código aparecen en las declaraciones de using en la parte superior de la muestra.

  1. En el Explorador de soluciones, haga clic con el botón secundario en la carpeta Referencias y después seleccione Agregar referencia.

  2. Seleccione Examinar y, a continuación, diríjase a la ubicación donde ha almacenado los DLL de Project Server que copió previamente. Elija los DLL que desee y luego seleccione Aceptar.

Nota:

Asegúrese de que las versiones de ensamblado en su equipo de desarrollo coinciden exactamente con aquellas del equipo de Project Server de destino.

Agregar un archivo de configuración de servicio

Si una aplicación configura de forma programada los servicios de WCF, no utiliza un archivo de configuración de servicio. De lo contrario, una aplicación o aplicación de consola de Windows usa el elemento system.serviceModel en un archivo app.config; una aplicación web incluye system.serviceModel en web.config. Para obtener más información sobre cómo usar un archivo app.config o configurar mediante programación los servicios WCF, vea Walkthrough: Developing PSI applications using WCF (Tutorial: Desarrollar aplicaciones PSI mediante WCF).

Cuando genera un archivo de origen de proxy de servicio, el comando SvcUtil.exe también crea un archivo output.config que es la base para el elemento system.serviceModel predeterminado en un archivo app.config o un archivo web.config. La descarga del SDK de Project 2013 incluye un archivo de output.config de ejemplo en Documentation\IntelliSense\WCF\Source.zip. Por ejemplo, el archivo output.config predeterminado que crea SvcUtil.exe para el servicio de Recurso incluye dos enlazados, llamados BasicHttpBinding_Resource y BasicHttpBinding_Resource1. El elemento client incluye dos extremos predeterminados. Un extremo es para el acceso seguro a la dirección HTTP en el puerto 32843 y el otro es para el acceso normal en el puerto 32843, de la manera siguiente:

<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>

La configuración de servicio de PSI no utiliza los extremos y enlazados predeterminados. Project Server requiere que las aplicaciones accedan a los servicios de PSI a través de ProjectServer.svc front-end, que actúa como un enrutador para llamadas a los servicios back-end. Para crear el archivo app.config, realice los siguientes pasos:

  1. Si establece una referencia al ensamblado de proxy de ProjectServerServices.dll o agrega el archivo de origen de proxy para un servicio, la aplicación no contiene un archivo app.config. Agregue un nuevo elemento al proyecto de Visual Studio. En el cuadro de diálogo Agregar nuevo elemento , elija la plantilla Archivo de configuración de aplicación, asígnele el nombre app.config y, a continuación, elija Agregar.

  2. Elimine todo el texto del archivo app.config y luego copie el siguiente código en el archivo. Puede usar el mismo enlace, por ejemplo basicHttpConf, para cada punto de conexión de servicio. Si desea utilizar más de un enlazado, por ejemplo, para enlazar los protocolos tanto HTTP como HTTPS, debe crear un enlazado para cada protocolo.

        <?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. Reemplace ServerName/ProjectServerName en la dirección del punto de conexión de cliente por el nombre del servidor y de la instancia de Project Web App.

  4. Reemplace por ServiceName el nombre del servicio PSI, como Resource. Asegúrese de reemplazar las tres instancias del nombre de servicio, por ejemplo:

        <endpoint address="https://myserver/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcResource.Resource"
            name="basicHttp_Resource" />
    
  5. Para utilizar más de un servicio de PSI, cree un elemento endpoint para cada servicio y para cada elemento binding que utiliza el servicio. Por ejemplo, los siguientes extremos configuran el cliente que utilizará el enlazado HTTP básico para el servicio de Project y el servicio de QueueSystem.

    Nota:

    Si ejecuta una aplicación y obtiene un error de que el servidor está demasiado ocupado o de que la solicitud de HTTP no está autorizada, asegúrese de que las direcciones de extremo sean correctas en el archivo app.config.

        <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>
    

Puede editar un archivo app.config utilizando el Editor de configuración de servicio de WCF en Visual Studio (en el menú Herramientas). La Figura 4 muestra cómo establecer el elemento contract en el cuadro de diálogo Editor de configuración de servicio de Microsoft. Si la solución usa el ensamblado de proxy PSI, abra ProjectServerServices.dll en el bin\debug directorio de la solución de Visual Studio. El cuadro de diálogo Explorador de tipo de contrato muestra todos los contratos de servicio de WCF (vea la Figura 5).

Figura 4. Uso del Editor de configuración de servicio de WCF

Uso de la configuración del servicio WCF Editor

Si la solución usa un archivo proxy de servicio, como wcfResource.cs, compile la aplicación y abra el archivo ejecutable en el bin\debug directorio. Para obtener más información sobre la edición del archivo app.config, consulte Tutorial: Desarrollo de aplicaciones de PSI utilizando WCF.

Figura 5. Uso del Explorador de tipo de contrato en el Editor de configuración de servicio de WCF

Uso del explorador de tipos de contrato

Usar autenticación múltiple

La autenticación de usuarios de Project Server locales, ya sea por autenticación de Windows o por autenticación de formas, ser realiza a través de reclamos que se procesan en SharePoint. La autenticación múltiple significa que la aplicación web en la que se aprovisiona Project Web App admite la autenticación basada en formularios y autenticación de Windows. Si ese es el caso, cualquier llamada a un servicio de WCF que utilice la autenticación de Windows fallará con el siguiente error, porque el proceso de reclamos no puede determinar qué tipo de usuario autenticar:

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.

Para solucionar el problema para WCF, todas las llamadas a los métodos de PSI deberían estar dentro de un OperationContextScope que se define para cada servicio de PSI. No anide ámbitos para varios servicios; por ejemplo, al usar llamadas a los servicios de Project y Recurso, cada conjunto de llamadas debería estar dentro de su propio ámbito.

En el siguiente ejemplo, el método DisableFormsAuth puede llamarse desde cada sección de OperationContextScope en una aplicación. El método elimina cualquier valor de encabezado que deshabilitó previamente la autenticación de formas, de modo tal que la autenticación de formas puede proceder si el parámetro isWindowsAuth es false. Si isWindowsAuth es true, el método DisableFormsAuth deshabilita la autenticación de formas.

En el método WcfSample, el objeto projectClient es una instancia de la clase SvcProject.ProjectClient de PSI.

// 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:
        // . . .
    }
}

Nota:

La realización de llamadas de PSI dentro de un OperationContextScope es necesario solo para aplicaciones que se ejecutan en un entorno de varias autenticaciones. Si Project Server utiliza solamente la autenticación de Windows, no es necesario establecer un ámbito y agregar un encabezado de solicitud web que deshabilite la autenticación de formas.

La solución de una aplicación basada en ASMX es diferente. Para obtener más información, vea la sección Uso de autenticación múltiple en Requisitos previos para ejemplos de código basados en ASMX en Project.

Modificar valores de constantes genéricas

La mayoría de las muestras tienen una o más variables que necesita actualizar para que la muestra funcione adecuadamente en el entorno. En el siguiente ejemplo, si tiene SSL instalado, use el protocolo HTTPS en lugar del protocolo HTTP. Cambie ServerName por el nombre del servidor que está usando. Reemplace ProjectServerName por el nombre del directorio virtual del sitio del servidor de proyectos, como PWA.

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

Cualquier otra variable que deba cambiar se señala en la parte superior del ejemplo de código.

Comprobación de los resultados:

Obtener e interpretar los resultados de una muestra de código no es siempre sencillo. Por ejemplo, si crea un proyecto, debe publicarlo antes de que pueda aparecer en la página del Centro de proyectos de Project Web App.

Puede verificar los resultados de muestra de código de varias formas, por ejemplo:

  • Use el cliente de Project Profesional 2013 para abrir el proyecto desde el equipo de Project Server y ver los elementos que desee.

  • Vea los proyectos publicados en la página del Centro de proyectos de Project Web App ( https://ServerName/ProjectServerName/projects.aspx).

  • Vea el registro de cola en Project Web App. Abra la página Configuración del servidor (elija el icono Configuración en la esquina superior derecha) y, a continuación, elija Mis trabajos en cola en la sección Configuración personal ( https://ServerName/ProjectServerName/MyJobs.aspx). En la lista desplegable Vista, puede ordenar por el estado de trabajo. El estado predeterminado Trabajos fallidos y en progreso en la última semana.

  • Use la página Configuración del servidor de Project Web App ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx) para administrar todos los trabajos de cola y eliminar o forzar la protección de objetos empresariales. Asegúrese de tener los permisos administrativos para obtener acceso a aquellos enlaces de la página Configuración del servidor.

  • Utilice Microsoft SQL Server Management Studio para ejecutar una consulta en una tabla de una base de datos de Project Server. Por ejemplo, utilice la siguiente consulta para seleccionar las 200 filas superiores de la tabla MSP_WORKFLOW_STAGE_PDPS para mostrar información sobre las páginas de detalles de proyectos (PDP) en etapas de flujo de trabajo.

        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]

Limpieza

Después de probar algunas muestras de código, existen configuraciones y objetos de empresa que deberían eliminarse o restablecerse. Puede usar la página Configuración del servidor de Project Web App para administrar datos empresariales ( https://ServerName/ProjectServerName/_layouts/15/pwa/admin/admin.aspx). Los enlaces en la página de Configuración de servidor le permiten eliminar elementos viejos, forzar la protección de proyectos, administrar la cola de trabajo para todos los usuarios y realizar otras tareas administrativas.

A continuación aparecen algunos de los enlaces de la página Configuración de servidor para utilizar para actividades típicas de limpieza después de ejecutar muestras de código:

  • Campos personalizados de empresa y tablas de búsqueda

  • Administrar trabajos en cola

  • Eliminación de objetos de empresa

  • Forzar protección de objetos de la empresa

  • Tipos de proyecto empresarial

  • Fases de flujo de trabajo

  • Etapas de flujo de trabajo

  • Páginas de detalles del proyecto

  • Períodos de presentación de informes de horas

  • Configuración y valores predeterminados del parte de horas

  • Clasificaciones de línea

SharePoint Server 2013 administra la configuración adicional para cada instancia de Project Web App, en lugar de una página específica de Configuración de Project Web App Server. En la aplicación Administración central de SharePoint, elija Configuración general de la aplicación, elija Administrar en Configuración de Project Server y, a continuación, elija la instancia de Project Web App en la lista desplegable de la página Configuración del servidor. Por ejemplo, elija Controladores de eventos del lado servidor para agregar o eliminar controladores de eventos para la instancia seleccionada de Project Web App.

Vea también