Paso 4: Creación del proyecto HeaderHelper

En este paso, creará una biblioteca de clases de .NET. Cuando una orquestación de procesos privados recibe un mensaje entrante, la biblioteca HeaderHelper determina si se requiere una conversión de documentos y, si es necesario, realiza esa conversión. Esto permite que la orquestación funcione con diferentes versiones de los documentos de RosettaNet Implementation Framework (RNIF). Además, cuando se envía un mensaje de respuesta 3A2, la biblioteca HeaderHelper realiza una conversión de documentos adicional antes de transmitir el mensaje.

Para crear el proyecto HeaderHelper

  1. En Visual Studio, en Explorador de soluciones, haga clic con el botón derecho en la solución Contoso, seleccione Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, en el panel Tipos de proyecto, seleccione Visual C#.

  3. En el panel Plantillas, seleccione la plantilla Biblioteca de clases .

  4. En el cuadro Nombre , escriba HeaderHelper y, a continuación, haga clic en Aceptar para crear el proyecto.

  5. En Explorador de soluciones, haga clic con el botón derecho en el archivo Class1.cs en el proyecto HeaderHelper, haga clic en Cambiar nombre, escriba HeaderHelper.cs y presione Entrar.

Para crear la clase Helper

  1. En Explorador de soluciones, expanda el proyecto HeaderHelper y, a continuación, haga doble clic en el nodo HeaderHelper.cs para abrir el archivo de origen HeaderHelper.

  2. Escriba el código siguiente en el archivo de origen y sobrescriba todo el código existente:

    using System;  
    using System.Xml;  
    
    namespace ContosoPriceAndAvailability  
    {  
        public class Helper  
        {  
            static public XmlDocument NormalizeHeader( XmlDocument curPip )  
            {  
                string strInput = curPip.OuterXml;  
                try  
                {  
                    XmlDocument xDoc = new XmlDocument();  
    
                    strInput = strInput.Replace("<!DOCTYPE Pip3A2PriceAndAvailabilityQuery SYSTEM \"3A2PriceAndAvailabilityQueryMessageGuideline_v1_3.dtd\"[]>",String.Empty);  
                    strInput = strInput.Replace("<Pip3A2PriceAndAvailabilityQuery>","<Pip3A2PriceAndAvailabilityQuery xmlns=\"http://schemas.microsoft.com/biztalk/btarn/2004/3A2PriceAndAvailabilityQueryMessageGuideline_v1_3.dtd\">");  
                    strInput = strInput.Replace("xml:",String.Empty);  
                    strInput = strInput.Replace("b:",String.Empty);  
                    strInput = strInput.Replace("lang:",String.Empty);  
                    strInput = strInput.Replace("ns1:",String.Empty);  
    
                    xDoc.LoadXml(strInput);  
    
                    return xDoc;  
                }  
                catch(Exception ex)  
                {  
                    System.Diagnostics.Debug.Write( ex.Message );  
                    throw ex;  
                }  
            }  
    
            static public string ReturnSCWithDocType( XmlDocument xmlDoc )  
            {  
                try  
                {  
                    string sResponse = xmlDoc.InnerXml;  
                    sResponse=sResponse.Replace("ns0:",String.Empty);  
                    xmlDoc.LoadXml(sResponse);  
                    xmlDoc.DocumentElement.RemoveAllAttributes();  
                    sResponse = xmlDoc.InnerXml;  
    
                    sResponse = sResponse.Insert(0,"<!DOCTYPE Pip3A2PriceAndAvailabilityResponse SYSTEM \"3A2PriceAndAvailabilityResponseMessageGuideline_v1_3.dtd\">");  
                    sResponse = sResponse.Replace("ns0:",String.Empty);  
                    sResponse = sResponse.Replace("b:",String.Empty);  
                    sResponse = sResponse.Replace("lang:",String.Empty);  
                    sResponse = sResponse.Replace("ns1:",String.Empty);  
    
                    return sResponse;  
                }  
                catch(Exception ex)  
                {  
                    throw ex;  
                }  
            }  
        }  
    }  
    
  3. En el menú Archivo, haga clic en Guardar todo.

Para crear un ensamblado con nombre seguro para el proyecto HeaderHelper

  1. En Explorador de soluciones, haga clic con el botón derecho en el proyecto HeaderHelper y, a continuación, haga clic en Propiedades.

  2. En el cuadro de diálogo Páginas de propiedades HeaderHelper, seleccione Firma en el panel izquierdo del panel de propiedades HeaderHelp.

  3. En el panel derecho, haga clic en Firmar el ensamblado.

  4. Haga clic en el cuadro de texto Elegir un archivo de clave de nombre seguro y, a continuación, seleccione <Examinar> en la lista desplegable.

  5. En el cuadro de diálogo Seleccionar archivo, vaya a la ubicación del ensamblado contoso y haga doble clic en FabConPriceAvail.snk.

  6. En el menú Archivo, haga clic en Guardar todo.

  7. En Explorador de soluciones, expanda el proyecto HeaderHelper, expanda el nodo Propiedades y, a continuación, haga doble clic en el nodo AssemblyInfo.cs para abrir el archivo de origen AssemblyInfo.cs.

  8. En el archivo de origen AssemblyInfo.cs, escriba el código siguiente en la línea después del atributo AssemblyCulture:

    [assembly: AssemblyKeyFile("../../../FabConPriceAvail.snk")]  
    
  9. En el menú Archivo, haga clic en Guardar todo.

Para compilar e implementar el proyecto HeaderHelper

  1. En Explorador de soluciones, haga clic con el botón derecho en el proyecto HeaderHelper y, a continuación, haga clic en Compilar.

  2. Inicie un símbolo del sistema de Visual Studio 2012.

  3. En el símbolo del sistema, vaya a la ubicación del directorio de salida del proyecto HeaderHelper (la carpeta \Bin\Debug).

  4. En el símbolo del sistema, escriba gacutil /if HeaderHelper.dll y presione Entrar para instalar el ensamblado HeaderHelper en la caché global de ensamblados.

Consulte también

Paso 5: Modificación de la orquestación de procesos privados de Contoso