步骤 4:创建 HeaderHelper 项目
在此步骤中,将创建一个 .NET 类库。 当专用业务流程收到传入消息时,HeaderHelper 库确定是否需要进行文档转换,如果需要,则执行该转换。 这使你的业务流程能够使用不同版本的 RosettaNet 实现框架 (RNIF) 文档。 此外,当发出 3A2 响应消息时,HeaderHelper 库在传送该消息之前执行另一种文档转换。
创建 HeaderHelper 项目
在 Visual Studio 解决方案资源管理器 中,右键单击 Contoso 解决方案,指向“添加”,然后单击“新建项目”。
在“添加新项目”对话框的“项目类型”窗格中,选择“ Visual C#”。
在“模板”窗格中,选择“ 类库” 模板。
在“ 名称 ”框中,键入 “HeaderHelper”,然后单击“ 确定 ”创建项目。
在“解决方案资源管理器”中,右键单击 HeaderHelper 项目中的 Class1.cs 文件,单击“重命名”,键入“HeaderHelper.cs”,然后按 Enter。
创建 Helper 类
在解决方案资源管理器中,展开 HeaderHelper 项目,然后双击 HeaderHelper.cs 节点打开 HeaderHelper 源文件。
在源文件中键入以下代码,覆盖全部现有代码:
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; } } } }
在“文件”菜单上,单击“全部保存” 。
为 HeaderHelper 项目创建强名称程序集
在“解决方案资源管理器”中,右键单击“HeaderHelper”项目,然后单击“属性”。
在“HeaderHelper 属性页”对话框中,在“HeaderHelp 属性”窗格的左窗格中选择“ 签名 ”。
在右窗格中,单击“ 为程序集签名”。
单击“ 选择强名称密钥文件 ”文本框,然后从下拉列表中选择“ <浏览> ”。
在“选择文件”对话框中,移动到 Contoso 程序集的位置,然后双击“ FabConPriceAvail.snk”。
在“文件”菜单上,单击“全部保存” 。
在解决方案资源管理器中,展开 HeaderHelper 项目,展开“属性”节点,然后双击 AssemblyInfo.cs 节点以打开 AssemblyInfo.cs 源文件。
在 AssemblyInfo.cs 源文件的 AssemblyCulture 属性后面的行中,键入以下代码:
[assembly: AssemblyKeyFile("../../../FabConPriceAvail.snk")]
在“文件”菜单上,单击“全部保存” 。
生成和部署 HeaderHelper 项目
在“解决方案资源管理器”中,右键单击“HeaderHelper”项目,然后单击“生成”。
启动 Visual Studio 2012 命令提示符。
在命令提示符下,移动到 HeaderHelper 项目输出目录的位置, (\Bin\Debug 文件夹) 。
在命令提示符下,键入 gacutil /if HeaderHelper.dll 然后按 Enter 将 HeaderHelper 程序集安装到 全局程序集缓存中。