WebService 返回复杂类型Response

 

我们经常使用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

posted @ 2008-09-16 15:11  upzone  阅读(1956)  评论(0编辑  收藏  举报