關於C#下寫的Web Service 服務在Delphi下調用時的問題
首先我覺得有必要把.Net平台下開發webservice進行一個比較全面的闡述,web service的最初產生是在電子商務的環境下出現的,有些問題通過傳統的手段已經不容易解決,比如在應用程序之間進行商務通信、數據交換,使用DCom、CORBA等二進制機制的東西已經行不通了,姑且不說他們受各自平台的限制,比如DCom(Distribute Common Objects Model)只能在Windows平台下進行,而CORBA(Common Objects Request Broker Architecture)又只是Java平台下的產物。他們要實現應用程序之間的數據通信是比較困難的。
在這種背景下,Web Services 應運而生,它很好的解決了跨語言、跨平台以及良好而安全的穿透企業防火牆。它的體系結構大體上分為五個層次:
HTTP(HyperText Transfer Protocol)信道下進行數據通信
XML(Extensable Markup Language)數據表達形式
SOAP(Simple Objects Access Protocol)的數據封裝
WSDL(WebServices Description Language)的描述語言格式
UDDI(Universal Description and Discovery Integration) 統一的描述、發現和集成
作為它的優點跨語言、跨平台以及良好而安全的穿透企業防火牆已經足以使我們感到興奮了。不過它也存在需要改善的地方,比如:
HTTP進行數據通信存在速度較慢的情況,尤其是第一次聯結。
需要一台Web Server這一額外的開銷
說了WebServices的體系結構以及其優點缺點以後我們切入正題,那就是我們這次討論的話題:
Web Service 服務在Delphi下調用時的問題
閒話少說,我們用一個檢驗WebMethod的Attribute的一個簡單的例子進行闡述:它是完成一次從客戶A轉帳到B的一個簡單商務過程。
首先我們在.NET FrameWork1.1下創建一個WebService,這時候.Net會幫我們自動創建一個Web應用
我們需要創建一個類AttributeTest,它是在命名空間NameSpace AttributeTesting下的,那麼這個類它將自動繼承了它的基類 System.Web.Services.WebService,需要支出的時,我們可以對這個Web應用類設置其WebServiceAttribute,其中基本屬性包括Description 和NameSpace
[WebServiceAttribute(Namespace="http://www.isdoo.com/services",
Description="Hello Ansel,This is a testing Web Service!")]
public class AttributeTest : System.Web.Services.WebService
{
[WebMethodAttribute(Description="描述信息:繼承了Count方法,並且對名稱進行重載。執行的是把錢從A用戶轉帳到B用戶......",
//MessageName="Changing MessageName",
BufferResponse=true,
CacheDuration=1000,
EnableSession=true,
TransactionOption=TransactionOption.RequiresNew)]
public string transMoney(double Money)
{
try
{
ContextUtil.EnableCommit();//Transaction only used to Database Operation!
MoneyInToA(Money);
MoneyOutFromB(Money);
ContextUtil.SetComplete();
return "Transaction Successful,total "+Money.ToString();
}