Compartir a través de


Consideraciones al publicar servicios WCF con los adaptadores de recepción WCF

Este tema proporciona información que debe tenerse en cuenta a la hora de publicar servicios WCF con los adaptadores de recepción WCF. Publicar un servicio mediante un adaptador WCF permite que un cliente WCF lo pueda llamar del mismo modo que si fuera un Servicio WCF convencional.

Hosts de tipo En curso

Hospedar la ubicación de recepción dentro del espacio de proceso BizTalk Server, btsntsvc.exe, permite las ventajas del desarrollo y la implementación simplificados. Además, crea más instancias de host que el hospedaje en IIS para aprovechar las funcionalidades de alta disponibilidad y equilibrio de carga de BizTalk Server. Para obtener información sobre el hospedaje fuera del proceso de BizTalk Server en IIS, consulte Configuración de IIS para los adaptadores de recepción de WCF aislados.

Establezca en false la propiedad IsOneWay de los Servicios WCF publicados con los adaptadores de WCF (excepto el adaptador de recepción WCF-NetMsmq).

La propiedad System.ServiceModel.OperationContractAttribute.IsOneWay de los servicios WCF publicados con los adaptadores WCF, excepto los servicios publicados con el adaptador de recepción WCF-NetMsmq donde se establece en true , se establece en false incluso para las ubicaciones de recepción unidireccionales. Si la propiedad IsOneWay se establece en false, incluso los métodos que devuelven un void dan como resultado un mensaje de respuesta. En este caso, la infraestructura crea y envía un mensaje vacío para indicar al autor de la llamada que se ha devuelto el método. Esta aproximación permite habilitar la infraestructura para enviar excepciones iniciadas por la operación del servicio devuelta al cliente.

Para consumir servicios WCF publicados con los adaptadores WCF (excepto el adaptador de recepción WCF-NetMsmq) en el que IsOneWay es false, la propiedad IsOneWay del lado cliente debe establecerse en false de la siguiente manera:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Nota

Dado que el valor predeterminado de la propiedad IsOneWay es false, no es necesario especificar la propiedad en el código.

La propiedad ReplyAction de OperationContractAttribute del equipo cliente debe establecerse en "*" (un asterisco) al consumir servicios WCP publicados con ubicaciones de recepción unidireccionales.

La propiedad System.ServiceModel.OperationContractAttribute.ReplyAction de System.ServiceModel.OperationContractAttribute se puede usar en el lado cliente para especificar el valor de la acción SOAP para los mensajes de respuesta de los servicios WCF.

Además de especificar un valor en particular para el encabezado de acción del mensaje de respuesta (para notificar al cliente que es una respuesta y la acción que debe seguirse), también puede especificar la cadena "*" (un asterisco). Especificar un asterisco en la aplicación cliente le ordena al cliente que no valide la acción de respuesta en los mensajes de respuesta que envía el servicio.

Para consumir un servicio WCF publicado por una ubicación de recepción unidireccional, el método proxy para el servicio WCF debe devolver void, en cuyo caso el método proxy espera que el servicio WCF envíe un mensaje vacío para indicar al autor de la llamada que el método ha devuelto. Para que el método proxy reciba este mensaje vacío, la propiedad ReplyAction de OperationContractAttribute debe establecerse en "*" (un asterisco) como se indica a continuación:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Nota

No es necesario establecer la propiedad ReplyAction en "*" (un asterisco) para el adaptador de WCF-NetMsmq, ya que el adaptador de WCF-NetMsmq requiere que los clientes WCF establezcan la propiedad IsOneWay en true.

Una instancia de host aislado sólo puede ejecutar un adaptador

Una instancia de host aislado sólo puede ejecutar un adaptador. Si configura los controladores de recepción de varios adaptadores aislados como los adaptadores de HTTP, SOAP y WCF con un host aislado, debe crear varios grupos de aplicaciones, uno para cada adaptador. Para obtener más información sobre los hosts aislados de BizTalk, vea Habilitación de servicios web.

Utilice la opción "Plantilla: contenido especificado por plantilla" al enviar contenido que no sea XML como mensajes de respuesta

Los adaptadores de WCF con cuerpo: cuerpo del mensaje de respuesta de BizTalk (el valor predeterminado) no permiten enviar mensajes que no son XML, como datos de caracteres y imágenes de mapa de bits. Puede usar el contenido de plantilla especificado por la opción de plantilla para que los adaptadores wcF envíen mensajes que no son XML. Para obtener más información sobre cómo usar la plantilla, vea Especificar el cuerpo del mensaje para los adaptadores de WCF.

Configurar los permisos para un Servicio WCF publicado con el Asistente para publicación de Servicio WCF.

Al usar ASP.NET aplicaciones creadas con el Asistente para publicación de servicios WCF en la plataforma Windows Server 2008 SP2 o Windows Server 2008 R2, pueden producirse errores relacionados con el acceso a archivos DLL durante la invocación del servicio WCF. Estos errores suelen estar relacionados con problemas con la seguridad predeterminada de Windows Server 2008 SP2 y Windows Server 2008 R2. Para obtener más información sobre estos errores, vea el artículo ayuda y soporte técnico de Microsoft llamado "Recibe un error "System.IO.FileNotFoundException" cuando la aplicación cliente llama a un servicio web" en el sitio web ayuda y soporte técnico en https://go.microsoft.com/fwlink/?LinkId=43659.

BizTalk Server requiere que, al proceso que ejecuta el Servicio WCF, se le concedan los permisos apropiados si un host de tipo en curso o un host aislado ejecutan el servicio. En Windows Server 2008 SP2 y Windows Server 2008 R2, el grupo de Windows predeterminado para hosts aislados es el grupo de usuarios host aislados, por lo que agregar los permisos al grupo de usuarios host aislados debe resolver este problema.

Para agregar los permisos al Grupo de usuarios de hosts aislados

  1. En el Explorador de Microsoft Windows, localice el directorio %windir%\temp.

  2. Haga clic con el botón derecho en %windir%\temp y, a continuación, haga clic en Propiedades.

  3. En el cuadro de diálogo Propiedades , haga clic en la pestaña Seguridad .

  4. Haga clic en Agregar, seleccione el grupo usuarios host aislados y, a continuación, haga clic en Aceptar.

Configurar los permisos para una ubicación de recepción WCF con el adaptador de WCF-NetMsmq

Cuando un cliente de WCF que utiliza NetMsmqBinding envía un mensaje a un Servicio WCF publicado con el adaptador de WCF-NetMsmq, éste dirige el mensaje a la cola de destino, que es la cola administrada por el administrador de colas del servicio. El administrador de cola del cliente envía el mensaje a una cola de transmisión (o de salida). La cola de transmisión es una cola situada en el administrador de colas del cliente que almacena mensajes para transmitirlos a la cola de destino.

El administrador de colas del servicio acepta los mensajes dirigidos a las colas de destino que le pertenecen y, además, almacena los mensajes. A continuación, el servicio realiza solicitudes para leer de la cola de destino y el administrador de colas entrega los mensajes al servicio. Por este motivo, la cuenta del servicio de la instancia de host de BizTalk que aloja la ubicación de recepción debe disponer de los permisos necesarios para leer desde la cola de destino.

Utilizar una expresión de ruta de cuerpo vacía para recibir un mensaje SOAP con datos de caracteres en el contenido del elemento de cuerpo SOAP

Para que un adaptador de recepción de WCF cree un mensaje de BizTalk a partir de un mensaje de respuesta entrante con datos de caracteres en el contenido del elemento Cuerpo SOAP, como se muestra en el ejemplo siguiente, debe dejar el cuadro de texto Expresión de ruta de acceso cuerpo vacío en la pestaña Mensaje del cuadro de diálogo propiedades de transporte del adaptador wcF.

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
      ...
    </s:Header>
    <s:Body>Contoso</s:Body>
</s:Envelope>

Si selecciona la opción Sobre o Cuerpo , el adaptador no puede crear el mensaje de BizTalk a partir del mensaje entrante anterior. El mensaje no se suspende porque los mensajes que producen error en el procesamiento del cálculo de referencia de SOAP entrante no se suspenden. Para obtener más información sobre cómo usar la expresión de ruta de acceso del cuerpo en la pestaña Mensaje , vea Especificar el cuerpo del mensaje para los adaptadores de WCF.

Nota

Puede usar la herramienta TraceViewer (SvcTraceViewer.exe) de Windows SDK mediante la configuración de BTSNTSvc.exe.config.file. Para obtener más información sobre Windows SDK, vea "Novedades de Windows SDK" en https://go.microsoft.com/fwlink/?LinkId=75219. Para obtener más información sobre la herramienta TraceViewer, vea "TraceViewer Tool (SvcTraceViewer.exe)" en https://go.microsoft.com/fwlink/?LinkId=75218.

Utilizar esquemas que hacen referencia a otros esquemas

Puede usar los elementos de redefinición, inclusión e importación cuando los esquemas se vuelven grandes y complejos, o cuando los esquemas que representan los distintos tipos de mensajes de instancia tienen algunas partes en común. Puede resultar útil combinar esquemas más pequeños en los esquemas que en última instancia definen la estructura de los mensajes de instancias que planea intercambiar con socios comerciales. Puede publicar estos esquemas como servicios WCF utilizando el Asistente para publicación de Servicio WCF de BizTalk.

Debe utilizar el Asistente para publicación de Servicio WCF de BizTalk para crear artefactos de BizTalk necesarios para consumir los servicios WCF desde un proyecto de BizTalk. Si desea consumir los servicios WCF desde una aplicación .NET, debe utilizar la herramienta de metadatos del modelo de servicio (Svcutil.exe) para crear la clase proxy para los servicios WCF. Para obtener más información sobre cómo usar esquemas que hacen referencia a otros esquemas, vea Esquemas que usan otros esquemas y Cómo crear esquemas que usan otros esquemas. Para obtener más información sobre Svcutil.exe, vea "Service Model Metadata Utility Tool (Svcutil.exe)" en https://go.microsoft.com/fwlink/?LinkID=74696.

La siguiente tabla muestra las limitaciones y consideraciones que necesita tener en cuenta a la hora de consumir servicios WCF publicados con esquemas que utilizan otros esquemas.

Elemento de esquema XML Consumir servicios WCF publicados con el Asistente para publicación de Servicio WCF de BizTalk Consumir servicios WCF alojados por aplicaciones .NET
<import> Compatible con el Asistente para consumición del Servicio WCF de BizTalk y Svcutil.exe Compatible con el Asistente para consumición del Servicio WCF de BizTalk y Svcutil.exe
<include> Compatible con el Asistente para consumo de servicios WCF de BizTalk y Svcutil.exe Nota: Svcutil.exe puede generar un mensaje de advertencia al crear la clase de proxy. Compatible con el Asistente para consumo de servicios WCF de BizTalk y Svcutil.exe Nota: Svcutil.exe puede generar un mensaje de advertencia al crear la clase de proxy.
<Redefinir> - Compatible con el Asistente para consumo de servicios WCF de BizTalk
- Compatibilidad limitada por Svcutil.exe Nota: Svcutil.exe tiene la misma limitación para el elemento de redefinición que tiene XSD.exe.
Compatible con el Asistente para consumo de servicios WCF de BizTalk y Svcutil.exe Nota: Svcutil.exe puede generar un mensaje de advertencia al crear la clase de proxy.

Nota

Svcutil.exe puede generar un mensaje de advertencia al crear la clase de proxy en el servicio WCF de BizTalk publicado con los esquemas mediante los elementos include y redefine . Por ejemplo, para indicar que el elemento global ya ha sido declarado.

Garantizar que una ubicación de recepción WCF en curso no se encuentra deshabilitada después de cambiar la parte del nombre del equipo en la dirección de extremo de servicio

Si cambia la parte de nombre de equipo en el cuadro de texto Dirección (URI) de una ubicación de recepción WCF en ejecución en proceso, se recomienda usar la consola de administración de BizTalk para comprobar si la ubicación de recepción sigue en ejecución. Por ejemplo, si cambia una dirección de punto de conexión de servicio mediante el adaptador de recepción de WCF-NetTcp, net.tcp://<Nombre de equipo>/samplepath, a net.tcp://localhost/samplepath, la ubicación de recepción puede deshabilitarse con service.InvalidOperationException. Si sólo modifica la parte del nombre del equipo en la dirección de extremo de servicio sin modificar la parte de la ruta, asegúrese de que la ubicación de recepción no se encuentra deshabilitada y habilítela si es necesario.

Establezca las opciones apropiadas de configuración de seguridad de MSDTC en los equipos clientes que se comunican con ubicaciones de recepción WCF remotas a través de un protocolo de transacción

Los adaptadores de recepción WCF-NetTcp, WCF-WSHttp y WCF-NetNamedPipe pueden participar en procesos de coordinación transaccional que administran los clientes WCF con los protocolos de transacción WS-AtomicTransaction y OleTransaction . Los mensajes pueden transmitirse a las ubicaciones de recepción de destino y pueden eliminarse de la base de datos de cuadro de mensajes en un contexto transaccional usando el protocolo WS-AtomicTransaction.

Para comunicarse con las ubicaciones de recepción de WCF remotas mediante los protocolos de transacción, debe configurar correctamente las opciones de configuración de seguridad de MSDTC en los equipos cliente WCF. En la tabla siguiente se enumeran los valores necesarios para las opciones disponibles en el cuadro de diálogo Configuración de seguridad de MSDTC:

Opción de configuración Valor predeterminado Valor recomendado
Acceso a DTC desde la red Disabled habilitado
Permitir salientes Disabled habilitado
Se requiere autenticación mutua habilitado Habilitado si las ubicaciones de recepción remota correspondientes ejecutan Windows Server 2003 SP1 o SP2 y se configuran con autenticación mutua requerida.
Se requiere autenticación de llamada entrante Disabled Habilitada si se ejecuta MSDTC en un clúster.

Después de aplicar estos cambios, deberá reiniciar el servicio MSDTC.

Para acceder al cuadro de diálogo Configuración de seguridad de MSDTC, siga estos pasos:

  1. Haga clic en Inicio, haga clic en Ejecutar y escriba dcomcnfg para iniciar la consola de administración de servicios de componentes .

  2. Haga clic para ampliar Servicios de componentes y para ampliar Equipos, haga clic con el botón secundario en Mi PC y, a continuación, haga clic en Propiedades.

  3. En el cuadro de diálogo Propiedades de Mi PC, en la ficha MSDTC, haga clic en Configuración de seguridad para mostrar el cuadro de diálogo Configuración de seguridad.

Explicación del contenedor SOAP cuando se usa al Asistente para publicación de Servicio WCF de BizTalk

Cuando una orquestación se expone como un servicio de Windows Communication Foundation (WCF) mediante el Asistente para publicación de servicios WCF, se genera un contenedor. Este contenedor usa el nombre del método del puerto en el mensaje XML al que se envía el mensaje. Este contenedor es el valor predeterminado para los sobres SOAP de Microsoft Permite a WCF encapsular el mensaje SOAP de varias partes en un mensaje WCF que el adaptador transmite al punto de conexión.

Como procedimiento recomendado, el remitente debe usar un contenedor y el receptor debe esperarlo, o el remitente no debe usar un contenedor y el receptor debe esperar el mensaje WCF sin formato. Si no se acuerda previamente si se va a usar un contenedor o no, se pueden producir problemas de compatibilidad entre lo que se envía y lo que se recibe.