biztalk在用户代码中构造多部分消息

大家知道,biztalk中可以在orchestration调用外部用户代码进行功能扩展,调用外部方法可以把消息作为参数传给外部方法,当然也可能需要外部方法返回一个消息到orchestration<?xml:namespace prefix = o />

对于schema类型的消息,在用户代码中直接构造一个XmlDocument的对象返回即可,类似这样:

public static XmlDocument GetXmlDocumentTemplate()

{

    String LOCATION = @"C:\MyTemplateLocation\MyMsgTemplate.xml";

    XmlDocument doc = new XmlDocument();

    doc.Load(LOCATION);

    return doc;

}

 

但是,如果需要返回的是多部分消息,事情就没这么简单了。

 

首先,XLANGMessage类没有new构造方法,你不能这样新建一个XLANGMessage消息:

XLANGMessage myXLANGMessage = new XLANGMessage();

 

Biztalk文档中提供了构造XLANGMessage的方法:

public static XLANGMessage XLANGMessageTest(XLANGMessage inMessage)

{

    XmlDocument XmlVariable = new XmlDocument();

    XmlVariable.LoadXml("<Root>Test</Root>");

    XLANGMessage outMessage = XmlVariable;

    Return outMessage

}

 

不幸的是,这个方法行不通,在编译的时候就提示:

Cannot implicitly convert type 'System.Xml.XmlDocument' to 'Microsoft.XLANGs.BaseTypes.XLANGMessage'

 

如果不死心,改成这样:

XLANGMessage outMessage = (XLANGMessage)XmlVariable;

编译后,这样提示:

Cannot convert type 'System.Xml.XmlDocument' to 'Microsoft.XLANGs.BaseTypes.XLANGMessage'

 

改一下代码,改成这样:

public static XLANGMessage XLANGMessageTest(XLANGMessage inMessage)

{

    XmlDocument XmlVariable = new XmlDocument();

    XmlVariable.LoadXml("<Root>Test</Root>");

    XLANGMessage outMessage = null;

    outMessage[0].LoadFrom(XmlVariable);

    Return outMessage

}

 

这样,编译时能通过了,但是运行时出错,提示outMessage不是对象的实例。

 

看来,在用户代码中构造XLANGMessage消息不是一般的困难,怎么都在用户代码中构造不出XLANGMessage

 

在用户代码中构造XLANGMessage如此难,可是如果在orchestration中使用过XLANGMessage,就会觉得在orchestration里构造一个XLANGMessage好像不是什么难事,那我们变通一下,从orchestraion传一个构造好的XLANGMessage到用户代码,用户代码中修改这个XLANGMessage然后返回就是了。

 

设计一个简单的例子:

从一个文件夹中读取一个文件,里面有简单的内容:chnking

消息进入orchestration后,orchestration将这个消息传送到外部用户代码,在用户代码中新建一个XLANGMessage,内容为接收进来消息后面加上“Output”字符串,返回orchestration,把这个新建的XLANGMessage消息输出到一个file,这个文件的内容应该为:chnking Output

 

首先设计一个orchestration

clip_image002

 

设计两个多部分消息,一个是输入消息MultipartType_In,一个是处理后返回要输出的消息MultipartType_Out,这两个多部分消息都只包含一个part,类型为XmlDocument

 

构造消息的消息赋值形状中的表达式:

//orchestraion中构造XLANGMessage消息就是这么简单

Msg_Out.MessagePart_Body = new System.Xml.XmlDocument();

Helper.MultiMsg.XLANGMessageTest(Msg_In,Msg_Out);

 

先在orchestration里用Msg_Out.MessagePart_Body = new System.Xml.XmlDocument(); 构造一个包含XmlDocument类型partXLANGMessage消息,传送到外部Helper.MultiMsg.XLANGMessageTest方法,外部方法修改了这个消息后返回。

 

外部方法的代码:

/// <summary>

/// 接收一个XLANGMessage,并新建一个XLANGMessage,并返回

/// </summary>

/// <param name="inMessage">接收需要处理的XLANGMessage消息</param>

/// <param name="outMessage">实际返回的XLANGMessage消息</param>

public static void XLANGMessageTest(XLANGMessage inMessage, XLANGMessage outMessage)

{

    //获得输入XLANGMessagepart的数据流

    XLANGPart xlp = inMessage[0];

    Stream sourceStrm = (Stream)xlp.RetrieveAs(typeof(Stream));

 

    //将数据流转成字符串

    byte[] streamByte = new byte[sourceStrm.Length];

    sourceStrm.Position = 0;

    sourceStrm.Read(streamByte, 0, (int)(sourceStrm.Length));

    string sourceStr = System.Text.Encoding.UTF8.GetString(streamByte);

 

    //简单处理过程,在输入消息的字符串上加上点内容,然后转成MemoryStream,

    //然后载入到输出消息的part

    sourceStr = sourceStr + " Output";

    byte[] outbyte = System.Text.Encoding.UTF8.GetBytes(sourceStr);

    MemoryStream outputStrm = new MemoryStream(outbyte, 0, outbyte.Length, false, true);

    outputStrm.Position = 0;

    outMessage[0].LoadFrom(outputStrm);

}

 

测试源代码:MultiPartMsgTest.rar

转载于:https://www.cnblogs.com/chnking/archive/2009/07/20/1526897.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

背景透明度 下拉菜单

下拉菜单 ——————> <style> /* 下拉按钮样式 */ .dropbtn {background-color: #4CAF50;color: white;padding: 16px;font-size: 16px;border: none;cursor: pointer; }/* 容器 <div> - 需要定位下拉内容 */ .dropdown {position: relative;display: inlin…

datavideo切换台说明书_巴掌大三轴稳定器,稳过微云台,试试飞宇VLOGPocket2

几乎全民VLOG的时代&#xff0c;我们随处可见有人举着手机、相机记录生活&#xff0c;甚至还有品牌推出了自带微云台的手机。不过&#xff0c;即便在手机上硬“塞”进一个微云台&#xff0c;效果也始终无法媲美真正的云台&#xff0c;对视频拍摄的提升相对有限&#xff0c;大部…

VSCode中Markdown目录显示异常

更新最新的VSCode之后编辑Markdown文件发现TOC标签的目录格式异常&#xff0c;发现是因为行尾字符导致&#xff0c;必须设置行尾字符进行解决。 转载于:https://www.cnblogs.com/phonecom/p/10904785.html

dlp防泄密系统卸载_怎样做好数据防泄密?奥赛系统早知道

前言大数据是趋势&#xff0c;泄密和数据泄露时常发生。员工离职、文件外传、在线拷贝..... 数据安全已经是每家公司必做功课。企业现状企业垂青“工作经历”和“自带资源”,“高薪挖人”被认为是企业事务快速增长、企业研制效果快速显现、企业快速兴起的捷径。当所“挖”人才来…

30万手表推荐_一年收入20万—30万的小生意,市场上有哪些呢?推荐几个供参考...

目前经济形势不乐观&#xff0c;许多创业者都陷入泥潭中&#xff0c;总是想挣脱&#xff0c;却总是徒劳无功。我认为在这样的时期&#xff0c;如果能静下心来&#xff0c;选择去做一些有前景的小生意&#xff0c;也是一个很好的选择。那么在目前市场上&#xff0c;有哪些能年收…

Dubbo中的监控和管理

一、Dubbo中的监控 1、原理 原理&#xff1a;服务消费者和提供者&#xff0c;在内存中累计调用次数和调用时间&#xff0c;定时每分钟发送一次统计数据到监控中心。 2、搭建监控服务 3、修改配置文件 修改注册中心的地址&#xff1a; 注意&#xff1a;这个有一个client参数&…

管道抛光防锈机器人_全国首创!嵊州企业的这项防锈技术用在了雪龙号上

2019-03-26 14:22 | 浙江新闻客户端 | 记者 金汉青 通讯员 胡吉图片来源于视觉中国近日&#xff0c;嵊州春凯新材料有限公司收到了来自上海铁路局的一批订单&#xff0c;对方要求春凯新材料对合肥工务段的一座高铁桥作钢铁除锈防锈处理。据了解&#xff0c;这将是春凯新材料研发…

jzoj4640. 【GDOI2017模拟7.15】妖怪

Description Input Output Sample Input 3 1 1 1 2 2 2 Sample Output 8.0000 Data Constraint 题解 我还挺喜欢数学的呢 这题一眼看上去不会&#xff0c;化化式子没想到未知数竟然是一个反比例一次函数的样子。 长这样&#xff1a;axbx\frac a xbxxa​bx 当时心态就没了。 原来…

activiti 设置可选处理人_新品速递|高端系列!慧明DF系列线性相位处理专业音箱处理器...

2020年对很多人来说&#xff0c;是特别艰难的一年&#xff0c;一场新冠疫情&#xff0c;可谓把整个演艺行业压得喘不过气&#xff0c;但是尽管如此&#xff0c;我们仍坚决相信行业将会很快复苏&#xff0c;一切终将迎来新的生机与活力。2020年初&#xff0c;哪怕是最困难的时期…

Scrapy 教程(十)-管道与数据库

Scrapy 框架将爬取的数据通过管道进行处理&#xff0c;即 pipelines.py 文件。 管道处理流程 一、定义 item item 表示的是数据结构&#xff0c;定义了数据包括哪些字段 class TianqiItem(scrapy.Item):# define the fields for your item here like:city scrapy.Field() …

地壳中元素含量排名记忆口诀_广州地化所等发现洋内弧大陆地壳成熟新机制

大陆的形成和演化是地球科学研究中广泛关注的前沿科学问题之一。大陆地壳总体上具有安山质到英安质地球化学成分特征&#xff0c;与洋内弧中大洋俯冲作用形成的岩浆岩具有相似的微量元素地球化学特征(如富集大离子亲石元素和亏损高场强元素)&#xff0c;众多学者认为大陆地壳的…

三星+android7.0+字体,三星S7升级安卓7.0新技能:新增分辨率调整功能

三星Galaxy Note 7推出了安卓7.0的升级&#xff0c;此次升级后&#xff0c;三星S7将会增加分辨率调整功能。这个功能可以根据用户的需求和喜好来进行调整&#xff0c;在HD(7201280像素)、FHD(12801920像素)以及QHD(14402560像素)三种不同的分辨率之间自由切换。在过去的一年里&…

html title属性无效_【学习教程】使用JavaScript删除CSS属性

方法1&#xff1a;使用CSS removeProperty&#xff1a;该CSSStyleDeclaration.removeProperty()方法被用来从一个元件的样式删除一个属性。通过遍历styleSheets数组并选择cssRule&#xff0c;可以选择元素的样式。然后可以使用要删除的属性指定removeProperty方法。句法&#x…

添加系统路径

export PATH$PATH:/usr/local/mongodb/bin/ source /etc/profile 转载于:https://www.cnblogs.com/xiaobiaomei/p/10922225.html

7怎样设置禁网_怎样才能提升网站内页的收录?

1、提高网站的内容质量&#xff0c;文章尽可能的原创。搜索引擎蜘蛛更喜爱原创的高质量内容&#xff0c;能够缩短网站的审核期。2、良好的网站结构&#xff0c;继续搜索引擎的匍匐与抓取。现在一般都是divcss的结构&#xff0c;不要运用table结构&#xff0c;尽可能少的运用fla…

Domain Socket本地进程间通信

socket API原本是为网络通讯设计的&#xff0c;但后来在socket的框架上发展出一种IPC机制&#xff0c;就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯&#xff08;通过loopback地址127.0.0.1&#xff09;&#xff0c;但是UNIX Domain Socket用于IPC更有…

入门指南_激光切管快速入门指南

本文是有关管材和激光管切割的思考的快速入门指南。要求首先&#xff0c;需要确定对管材尺寸的要求。考虑以下问题&#xff1a;将要加工的管材最大和最小直径是多少&#xff1f;切割这些管材需要多大功率&#xff1f;它们是薄壁还是厚壁&#xff1f;原材料和成品零件的长度是多…

页面调试

1.network all 所有请求 XHR ajax请求 WS websocket请求 转载于:https://www.cnblogs.com/gzl180110/p/10930802.html

hexo 环境变量_小白使用 Github + Hexo 从 0 搭建一个博客

最近有几位同学在公众号后台留言问我的博客站是怎么建站的&#xff0c;思来想去&#xff0c;还是写一篇从 0 开始吧。前置准备我们先聊一下前置准备&#xff0c;可能很多同学一听说要自己搭一个博客系统&#xff0c;直接就望而却步。不得有台服务器么&#xff0c;不得搞个数据库…

android service交互,Android Activity与Service的交互方式

参考: http://blog.csdn.net/gebitan505/article/details/18151203实现更新下载进度的功能1. 通过广播交互Server端将目前的下载进度&#xff0c;通过广播的方式发送出来&#xff0c;Client端注册此广播的监听器&#xff0c;当获取到该广播后&#xff0c;将广播中当前的下载进度…