在此步骤中,将创建一个 .NET 类库。 当专用进程业务流程收到传入消息时,HeaderHelper 库将确定是否需要文档转换,如果需要,则执行该转换。 这样,业务流程就可以处理不同版本的 RosettaNet 实现框架 (RNIF) 文档。 此外,发送 3A2 响应消息时,HeaderHelper 库在传输消息之前执行其他文档转换。
创建 HeaderHelper 项目
在 Visual Studio 的解决方案资源管理器中,右键单击 Contoso 解决方案,指向 “添加”,然后单击“ 新建项目”。
在“添加新项目”对话框中的“项目类型”窗格中,选择 “Visual C#”。
在“模板”窗格中,选择 “类库 ”模板。
在 “名称 ”框中,键入 HeaderHelper,然后单击“ 确定 ”以创建项目。
在解决方案资源管理器中,右键单击 HeaderHelper 项目中的Class1.cs文件,单击“重命名”,键入HeaderHelper.cs,然后按 Enter。
创建辅助类
在解决方案资源管理器中,展开 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 程序集安装到 全局程序集缓存中。