步骤 4:创建 HeaderHelper 项目

在此步骤中,将创建一个 .NET 类库。 当专用业务流程收到传入消息时,HeaderHelper 库确定是否需要进行文档转换,如果需要,则执行该转换。 这使你的业务流程能够使用不同版本的 RosettaNet 实现框架 (RNIF) 文档。 此外,当发出 3A2 响应消息时,HeaderHelper 库在传送该消息之前执行另一种文档转换。

创建 HeaderHelper 项目

  1. 在 Visual Studio 解决方案资源管理器 中,右键单击 Contoso 解决方案,指向“添加”,然后单击“新建项目”。

  2. 在“添加新项目”对话框的“项目类型”窗格中,选择“ Visual C#”。

  3. 在“模板”窗格中,选择“ 类库” 模板。

  4. 在“ 名称 ”框中,键入 “HeaderHelper”,然后单击“ 确定 ”创建项目。

  5. 在“解决方案资源管理器”中,右键单击 HeaderHelper 项目中的 Class1.cs 文件,单击“重命名”,键入“HeaderHelper.cs”,然后按 Enter

创建 Helper 类

  1. 在解决方案资源管理器中,展开 HeaderHelper 项目,然后双击 HeaderHelper.cs 节点打开 HeaderHelper 源文件。

  2. 在源文件中键入以下代码,覆盖全部现有代码:

    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. 在“文件”菜单上,单击“全部保存” 。

为 HeaderHelper 项目创建强名称程序集

  1. 在“解决方案资源管理器”中,右键单击“HeaderHelper”项目,然后单击“属性”。

  2. 在“HeaderHelper 属性页”对话框中,在“HeaderHelp 属性”窗格的左窗格中选择“ 签名 ”。

  3. 在右窗格中,单击“ 为程序集签名”。

  4. 单击“ 选择强名称密钥文件 ”文本框,然后从下拉列表中选择“ <浏览> ”。

  5. 在“选择文件”对话框中,移动到 Contoso 程序集的位置,然后双击“ FabConPriceAvail.snk”。

  6. 在“文件”菜单上,单击“全部保存” 。

  7. 在解决方案资源管理器中,展开 HeaderHelper 项目,展开“属性”节点,然后双击 AssemblyInfo.cs 节点以打开 AssemblyInfo.cs 源文件。

  8. 在 AssemblyInfo.cs 源文件的 AssemblyCulture 属性后面的行中,键入以下代码:

    [assembly: AssemblyKeyFile("../../../FabConPriceAvail.snk")]  
    
  9. 在“文件”菜单上,单击“全部保存” 。

生成和部署 HeaderHelper 项目

  1. 在“解决方案资源管理器”中,右键单击“HeaderHelper”项目,然后单击“生成”。

  2. 启动 Visual Studio 2012 命令提示符

  3. 在命令提示符下,移动到 HeaderHelper 项目输出目录的位置, (\Bin\Debug 文件夹) 。

  4. 在命令提示符下,键入 gacutil /if HeaderHelper.dll 然后按 EnterHeaderHelper 程序集安装到 全局程序集缓存中。

另请参阅

步骤 5:修改 Contoso 私有业务流程