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 的示例。