監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

在ASP程序中調(diào)用Web Service

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

在ASP程序中調(diào)用Web Service

微軟投入了大量資金來(lái)推銷其.NET的各種優(yōu)點(diǎn),其中.NET最大的優(yōu)點(diǎn)之一就是微軟始創(chuàng)的XML Web Services。XML Web Services可以將你的程序和以前定制的DLL和COM/DCOM組建分離(避免陷入DLL陷阱),然后將這些功能設(shè)計(jì)成為XML Web Services,讓其他應(yīng)用程序也可以訪問(wèn)和調(diào)用這些功能(比如:網(wǎng)站、分布式程序)(關(guān)于怎樣在.NET中建立和使用XML Web Services,請(qǐng)參考這篇文章:http://aspnet.4guysfromrolla.com/articles/062602-1.aspx)。那么,當(dāng)你考慮提升現(xiàn)有ASP程序性能的時(shí)候,怎樣將其與已經(jīng)開(kāi)發(fā)的XML Web Services結(jié)合呢?

本文的目的就是演示怎樣將最新的XML Web Services和現(xiàn)有ASP程序結(jié)合起來(lái)。通過(guò)將一些具體的業(yè)務(wù)功能寫(xiě)成XML Web Services并且將這些XML Web Services與ASP程序完美結(jié)合,現(xiàn)有的ASP程序就可以象ASP.NET程序一樣共同“分享”XML Web Services的好處了。當(dāng)你需要提升現(xiàn)有ASP程序的性能并且和已經(jīng)開(kāi)發(fā)的ASP.NET同步,但是有沒(méi)有時(shí)間和精力將這些程序完全修改為ASP.NET程序的時(shí)候,我們就可以考慮將ASP和XML Web Services結(jié)合使用。

本文將要用到的例子是基于以下現(xiàn)實(shí)需要的:在B2B電子商務(wù)中,對(duì)于一些比較固定的客戶,我們可能對(duì)他們有一些特殊的折扣。下文中我們將建立一Web Services,這個(gè) Web Services的功能就是針對(duì)特殊的客戶按照一定規(guī)則計(jì)算折扣,然后,我們將其與一個(gè)簡(jiǎn)單的ASP程序結(jié)合起來(lái)應(yīng)用。

數(shù)據(jù)庫(kù)

我們?cè)谶@里使用微軟Access中自帶的NorthWind數(shù)據(jù)庫(kù),當(dāng)然,我們不會(huì)照盤(pán)全收,我們需要對(duì)數(shù)據(jù)庫(kù)的“Products”數(shù)據(jù)表表結(jié)構(gòu)作一些小小的修改:增加一個(gè)保存商品實(shí)際價(jià)格的“CostPrice”字段(我們將填入一些隨機(jī)數(shù)據(jù))(這個(gè)數(shù)據(jù)庫(kù)可以在這里下載到:
http://www.4guysfromrolla.com/webtech/code/asptonet.zip

Web Service

在文章“Creating and Consuming a Web Service”中已經(jīng)討論過(guò)(
http://aspnet.4guysfromrolla.com/articles/062602-1.aspx),我們可以使用文本編輯器來(lái)建立Web Services,比如:WEB Matrix Projext或者VS.NET等工具。文中我們將試驗(yàn)使用VS.NET來(lái)建立Web Service。

首先,在VS.NET中建立一個(gè)新的ASP.NET工程,然后,刪除程序建立的Web Form,增加一個(gè)新的Web Service文件(命名為:eCommerce.asmx),在這個(gè)Web Service中,將默認(rèn)的名字空間修改為ClassicASP_nDotNET.eCommerce,并且增加一個(gè)名為CalculateDiscountCompanyX的方法。

WEB方法CalculateDiscountCompanyX是一個(gè)用于計(jì)算公司CompanyX折扣的簡(jiǎn)單函數(shù)(當(dāng)然,更為健壯的解決方法是寫(xiě)一個(gè)通用的函數(shù)比如:CalculateDiscount(CompanyID),在這個(gè)函數(shù)中CompanyID專門(mén)用于定義特定的公司編號(hào),然后,程序根據(jù)公司編號(hào)查找數(shù)據(jù)庫(kù)得到具體的公司名稱,并對(duì)其做出折扣計(jì)算。我們這里主要的目的在于演示XML Web Services和ASP程序的結(jié)合使用,因此,只用需要一些簡(jiǎn)單函數(shù)。)

在我們的應(yīng)用中,假設(shè)對(duì)公司CompanyX的最小折扣為10%,公司最低純利潤(rùn)為7.5%,這些具體的折扣和利潤(rùn)都是固化寫(xiě)在程序中的。

WEB方法CalculateDiscountCompanyX相當(dāng)簡(jiǎn)單,將用到以下一些參數(shù):

1、UnitPrice:建議零售價(jià)格,數(shù)據(jù)類型為Double;

2、CostPrice:商品的實(shí)際價(jià)格,也就是進(jìn)貨價(jià)格,數(shù)據(jù)類型為Double;

3、AccessCode:該Web Services的安全密碼,數(shù)據(jù)類型為String;

如果函數(shù)計(jì)算出現(xiàn)錯(cuò)誤,將返回-1,以下是函數(shù)源代碼:

<WebMethod()> _

Public Function CalculateDiscountCompanyX(ByVal UnitPrice As Double, _

ByVal CostPrice As Double, _

ByVal AccessCode As String) As Double

Dim dblDiscount As Double, _

dblMarkup As Double, _

dblMinMarkup As Double, _

dblMinClientDiscount As Double

dblMarkup = (1.3) '期望利潤(rùn)

dblMinMarkup = (1.075) ' 最低利潤(rùn)

' 對(duì)客戶的期望最低折扣

dblMinClientDiscount = (0.1)

Try

If AccessCode = "p455w0rd" Then

' 根據(jù)利潤(rùn)計(jì)算折扣

dblDiscount = FormatNumber(((UnitPrice - (CostPrice * dblMarkup))), 2)

' 檢查折扣是否合適na

If dblDiscount + 0 <= (UnitPrice * dblMinClientDiscount) Then

dblDiscount = FormatNumber((UnitPrice * dblMinClientDiscount), 2)

End If

' 檢查是否有最低利潤(rùn)

If (UnitPrice - dblDiscount) <= (CostPrice * dblMinMarkup) Then

dblDiscount = FormatNumber((UnitPrice - (CostPrice * dblMinMarkup)), 2)

End If

Return dblDiscount

Else

Return -1 '密碼錯(cuò)誤

End If

Catch ex As Exception

Return -1

End Try

End Function

將Web Services和ASP程序結(jié)合起來(lái)

為了使ASP和Web Services相互通訊變得相對(duì)簡(jiǎn)單,需要首先下載安裝MS SOAP Toolkit 2.0(地址為:
http://msdn.microsoft.com/SOAP/),這樣,就可以使用SOAP來(lái)實(shí)現(xiàn)ASP和Web Services的通訊,這將使ASP程序和Web Services通訊與使用其他方法相比變得簡(jiǎn)單。事實(shí)上,在4Guys網(wǎng)站有一篇文章專門(mén)介紹SOAP的使用,這篇文章就是:Creating Web Services using ASP(地址:http://www.4guysfromrolla.com/webtech/070401-1.shtml)。

這樣,ASP頁(yè)面就可以使用剛才我們建立的Web Service計(jì)算公司CompanyX的商品折扣,為了使程序看上去更加簡(jiǎn)單和條例,我們將SOAP調(diào)用從主程序移出來(lái),專門(mén)寫(xiě)一個(gè)自己的函數(shù):CalculateDiscount。由于使用了SOAP,所以這個(gè)函數(shù)調(diào)用Web Service比較簡(jiǎn)單,只有幾行代碼,程序代碼如下:

Public Function CalculateDiscount(UnitPrice, CostPrice)

SET objSoapClient = Server.CreateObject("MSSOAP.SoapClient")

objSoapClient.ClientProperty("ServerHTTPRequest") = True

' 下面的鏈接需要修改為我們具體網(wǎng)站的鏈接

Call objSoapClient.mssoapinit("
http://localhost/ClassicASP_n_DotNET/" & _

"eCommerce.asmx?WSDL", "eCommerce")

' 使用SOAP對(duì)象調(diào)用Web Service函數(shù)

CalculateDiscount = objSoapClient.CalculateDiscountCompanyX(UnitPrice, _

CostPrice, "p455w0rd")

End Function

以上的程序相當(dāng)?shù)拿髁?,首先mssoapinit方法用WSDL(關(guān)于WSDL,請(qǐng)參考:

http://samples.gotdotnet.com/quickstart/aspplus/doc/webservicesintro.aspx
)為調(diào)用Web Service作準(zhǔn)備,然后真正計(jì)算折扣的函數(shù)CalculateDiscountCompanyX被調(diào)用,將折扣計(jì)算出來(lái)并且返回給函數(shù)CalculateDiscount。

在我們提供的源代碼下載包里面,意思的函數(shù)都可以在companyx_products.asp頁(yè)面找到,ASP頁(yè)面將遍歷整個(gè)“Products”數(shù)據(jù)表,在現(xiàn)實(shí)每條記錄的時(shí)候都將調(diào)用“CalculateDiscount”函數(shù)來(lái)計(jì)算公司CompanyX的折扣。

結(jié)論

文章介紹了怎樣用ASP來(lái)和Web Service通訊,另外,我們可以知道,將一些功能模塊設(shè)計(jì)成為Web Service可以讓ASP象ASP.NET一樣調(diào)用這些模塊。

祝編程快樂(lè),下載以上程序代碼(注意下載解壓以后是MSI格式文件)。 

發(fā)布:2007-03-25 13:24    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢