BizTalk 2006 使用 Web 服务并将编排发布为 Web 服务并从 ASPX 调用






2.30/5 (8投票s)
本示例演示了 BizTalk 2006 消费 Web 服务,然后将编排发布为 Web 服务,并从 ASPX 调用它。
引言
我们其中一个客户的项目包括访问不同 Web 服务中的数据。他们希望将所有这些服务集成起来以执行他们的业务流程。他们不希望单独调用所有 Web 服务,而是希望使用某种机制来集成它们到一个中心位置,从而执行他们的业务逻辑。
为了为他们提供集成不同服务的机制,BizTalk 出现了,它将提供一个解决方案来集中化业务流程,以便在它们之间进行通信和访问数据。

背景
在实际场景中,我将消费一个第三方 Web 服务,但在这里为了演示,我正在创建我自己的 Web 服务。

使用代码
在这里,我们在编排中消费了两个 Web 服务,GetAdvt 和 GetWidget,并将它们的输出保存到 SQL Server 表中,然后通过调用已发布的编排将其渲染到 ASPX 页面。
以下是在 ASPX 上调用已发布编排的代码
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Web.Caching;
using System.Data.SqlClient;
//using SKCV_GetPage; //Add Web service
public partial class LandingPage : System.Web.UI.Page
{
    private string ContentMetaData4 = "";
    private static XslCompiledTransform transform = new XslCompiledTransform();
    private string lReqOn = "", lOrchCompleted = "", 
            lDataInsert = "", lOrchInvok="";
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void cmdGetPage_Click(object sender, EventArgs e)
    {
        try
        {
            lReqOn = System.DateTime.Now.ToString();
            CallBizTalkWS();//Call BizTalk Published Orchestration WS
            lOrchCompleted = System.DateTime.Now.ToString();
            System.Threading.Thread.Sleep(2000);//delay for 2 Sec.
            //Geting Data From PublishContents Table
            DoTransformation(Convert.ToInt16(txtpageId.Text), 3, 2);
            Xml1.DocumentContent = ContentMetaData4.Replace("xmlns", "xmlns:xsl");
            //Geting Data From PublishContents Table
            DoTransformation(Convert.ToInt16(txtpageId.Text), 99, 2);
            Xml2.DocumentContent = ContentMetaData4.Replace("xmlns", "xmlns:xsl");
            //Diaplying Times
            labUserId.Text = txtuserId.Text;
            labReqOn.Text = lReqOn;
            labOrchInvok.Text = lOrchInvok;
            labOrchCompleted.Text = lOrchCompleted;
            labDataInsert.Text = lDataInsert;
            labRender.Text = System.DateTime.Now.ToString();
        }
        catch (Exception lException)
        {
            Response.Write(lException.Message.ToString());
        }
    }
# region "Private Functions"
    private void CallBizTalkWS()
    {
        SKCV_GetPage.InPara lInPara = new SKCV_GetPage.InPara();
        lInPara.userId = txtuserId.Text;
        lInPara.pageId = txtpageId.Text;
        SKCV_GetPage.WebService_SKCV_GetPage lGetPage = new SKCV_GetPage.WebService_SKCV_GetPage();
        IAsyncResult lIAsyncResult;
        // Begin the Async call to WS
        lIAsyncResult = lGetPage.BeginOperation_1(lInPara,null, null);
        // Wait for the asynchronous operation to complete.
        lIAsyncResult.AsyncWaitHandle.WaitOne();
        lGetPage.EndOperation_1(lIAsyncResult);
        if (lIAsyncResult.IsCompleted)
        {
            //labMsg.Text = "WS Completed" ;
            //Geting Data From PublishContents Table
            //DoTransformation(Convert.ToInt16(txtpageId.Text), 3, 2);
            //Xml1.DocumentContent = ContentMetaData4.Replace("xmlns", "xmlns:xsl");
            //Geting Data From PublishContents Table
            //DoTransformation(Convert.ToInt16(txtpageId.Text), 99, 2);
            //Xml2.DocumentContent = ContentMetaData4.Replace("xmlns", "xmlns:xsl");
        }
    }
    private void DoTransformation(int PageId, int PositionId, int ContentId)
    {
        //int PageId = 0, PositionId, ContentId;
        string Content = "", ContentMetaData1 = "", 
               ContentMetaData2 = "", ContentMetaData3 = "";
        SqlConnection lCon = new SqlConnection(
          ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
        lCon.Open();
        using (lCon)
        {
            SqlCommand lCmd = lCon.CreateCommand();
            lCmd.CommandType = CommandType.StoredProcedure;
            lCmd.CommandText = "SelectPublishContents";
            SqlDataAdapter lAdp = new SqlDataAdapter();
            lAdp.SelectCommand = lCmd;
            SqlParameter lPageId = new SqlParameter("@PageId", SqlDbType.Int);
            lPageId.Value = PageId;//Convert.ToInt16(txtpageId.Text);
            SqlParameter lPositionId = new SqlParameter("@PositionID", SqlDbType.Int);
            lPositionId.Value = PositionId ;
            SqlParameter lContentId = new SqlParameter("@ContentId", SqlDbType.Int);
            lContentId.Value = ContentId ;
            lCmd.Parameters.Add(lPageId);
            lCmd.Parameters.Add(lPositionId);
            lCmd.Parameters.Add(lContentId);
            SqlDataReader lReder;
            lReder = lCmd.ExecuteReader();
            if (lReder.HasRows)
            {
                while (lReder.Read())
                {
                    PageId = Convert.ToInt16(lReder["PageId"].ToString());
                    PositionId = Convert.ToInt16(lReder["PositionId"].ToString());
                    ContentId = Convert.ToInt16(lReder["ContentId"].ToString());
                    Content = lReder["Content"].ToString();
                    ContentMetaData1 = lReder["ContentMetaData1"].ToString();
                    ContentMetaData2 = lReder["ContentMetaData2"].ToString();
                    ContentMetaData3 = lReder["ContentMetaData3"].ToString();
                    ContentMetaData4 = lReder["ContentMetaData4"].ToString();
                    lDataInsert = lReder["CreatedOn"].ToString();
                    lOrchInvok = lReder["ContentMetaData2"].ToString();
                }
            }
        }
    }
#endregion
}
关注点
我使用“CallBizTalkWS()”异步调用 Web 服务。在这里,您还可以找到 SOAP 和 SQL Adapter 的示例。


