我们经常使用WebService 来做一些逻辑封装或者其他等等...
一般情况下WebService 只能返回一个简单数据类型. 但是实际项目中,经常是需要返回复杂类型,比如Create Order时候,需要返回成功失败标识,如果成功,需要带出OrderKey,等等;如果失败,需要返回错误原因,错误代码等等. 我们以往的项目中一般是在WebService 中构建一个XmlDocument,追加需要返回的内容,如成功标识,错误码等等,然后在BizTalk Orchestration 中用XmlDocument Load 这个返回的Xml,Construct 相应的Schema Message. 但是毕竟这样有性能问题,而且对于WebService 来说,编程起来太麻烦.
这里说一下我的另一种方法.
核心提示,使用xsd.exe 生成typed schema code, 让webservice 直接返回复杂类型
1.定义返回结果Schema, PGIOrder_Schema.xsd
2.xsd.exe PGIOrder_Schema.xsd /classes 生成实体类 PGIOrder
3.将生成的类文件add 到webservice project中,WebService 代码如下
[WebMethod]
public PGIOrder GetPGIOrder(string OrderKey)
{
//Add your biz logic here...
PGIOrderOrderInfo orderInfo = new PGIOrderOrderInfo();
orderInfo.OrderKey = OrderKey;
orderInfo.SN = "upzone";
PGIOrderResult orderResult = new PGIOrderResult();
orderResult.ErrorMessage = "Success";
orderResult.Flag = "S";
PGIOrder order = new PGIOrder();
order.OrderInfo = new PGIOrderOrderInfo[] { orderInfo };
order.Result = orderResult;
return order;
}
4.BizTalk WSE Adapter Generate GetPGIOrder WebMethod 的Schema.从生成的Response Schema发现,已经生成完整的Response 结构,这次而不是一个简单的String Response.
5.Construct Request Schema 就可以用了,
测试通过,附上SourceCode:TestWS