最近找了些在Win32環境下調用ASP.NET編寫的Web Service的例子。

來源:互聯網
上載者:User

1.Delphi
如今 Web Service 已越來越火了,在DotNet已開發的Web Service中,Delphi 7如何方便的調用DotNet寫的Web Service呢?
方法有兩種,一種是在Delphi 7中WSDLImp工具將DotNet寫的Web Service轉化為Interface 單元檔案,另一種方法是用MS 提供的 Microsoft Soap Toolkit(MSST) 工具。
下面是用WSDLImp工具調用C# 寫一個簡單的 Web Service:
啟動 VS.Net工具,在C#項目中,選擇 ASP.Net Web服務,在代碼中寫入

[WebMethod]
  public double add(double s1, double s2)
  {
    return s1+s2;
  }
產生配件後,在IE 中輸入  http://localhost/ASPNETWS/Service1.asmx
會看到 有一個 add 的連結,點擊進入,並調用測試:
如,輸入 s1為 34, s2為 235.34 調用後為
<?xml version="1.0" encoding="utf-8" ?>
  <double xmlns="http://tempuri.org/">269.34000000000003</double>
輸入 http://localhost/ASPNETWS/Service1.asmx?WSDL,可看到WSDL單元
測試成功後,在Delphi 7的Bin目錄找到 WSDLImp.exe工具,並拷到一處,
在 命令提示字元 中輸入 WSDLImp http://localhost/ASPNETWS/Service1.asmx?WSDL
會在目前的目錄中產生一個 Service.pas 檔案,這就是要在Delphi中使用的Interface檔案。

啟動Delphi 7,建立 Application工程,放入一個TButton組件;
在uses 中加入 InvokeRegistry, Rio, SOAPHTTPClient, Service1;

procedure TForm1.btn_CShapWSClick(Sender: TObject);
var
    WSResult: Double;
    WSIServer: Service1Soap;
begin
  WSIServer:= GetService1Soap(true,'',HTTPRIO1);
  WSResult:= WSIServer.add(23,342.234);

  showmessage('WSResult: '+ FloatToStr(WSResult));
end;
擷取 C#編寫的Add方法。
以上在 VS.Net(C#), Delphi 7中編寫通過!

1.1Sample

使用Delphi和WebServices技術開發簡訊應用程式

摘 要:本文通過使用Delphi和Web Services技術開發簡訊應用程式的執行個體詳細的介紹了如何在Delphi中開發基於Web Services技術的應用程式。

關鍵字:Delphi;Web Service;簡訊應用程式開發

一提起基於Web Services技術的應用程式開發,一般人首先想到的開發工具是Vs.net,其實作為快速應用程式開發工具(RAD)的老大,Delphi從6.0就開始支援Web Services的開發和應用了,本文通過使用Delphi 7.0調用新浪傳送簡訊的Web Service進行簡訊應用程式開發這一執行個體詳細的介紹在Delphi中如何開發基於Web Services的應用系統。

第一步,準備工作,瞭解新浪簡訊Web Service。新浪傳送簡訊的Web Service地址是http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl,該Web Service就只有一個方法,即string sendXml(carrier,userid,password,mobilenumber,content,msgtype)。各個參數全部為string類型,其含義基本如下(可能不正確)。

Carrier:電訊廠商名稱,好像可以隨便輸,建議輸入“Sina”,如果輸入其他的值,訊息發送的特別慢;

Userid:您在新浪無線上註冊的手機ID,如果您沒有在http://sms.sina.com.cn上註冊您的手機,你是無法使用本Web Service傳送簡訊的;

Password:您在新浪無線上註冊手機時所使用的密碼;

Mobilenumber:對方的手機號碼;

Content:發送短訊息的內容;

Msgtype:發送短訊息的類型,我估計支援多媒體訊息,不過我不知道怎麼使用,似乎隨便輸什麼都可以,我使用的是“Text”。

資費標準請參看新浪無線網站上的相關說明,應該是一條一角錢,不過也或者是一條兩角線,具體不太清楚。由於其後台可能使用了訊息佇列機制,在繁忙的時候,可能會有較長時間的延遲。

第二步,先建立一個空白的應用程式。運行Delphi 7,開啟[File]->[New]->[Application]菜單,Delphi自動產生一個預設的工程。將預設的表單Form1改為sms,然後將改工程儲存為smsdemo.prj。如所示:

圖1

第三步,引入Web Service。,開啟[File]->[New]->[Other]菜單,在彈出的視窗中選擇WebServices Tab頁面,然後選擇其中的WSDL importer選項,單擊OK按鈕彈出WSDL importer Wizard視窗,2所示。在其上的Location of WSDL File or URL 中輸入:http://smsinter.sina.com.cn/ws/smswebservice0101.wsdl (注意,千萬不能輸錯!),單擊Next按鈕後,再單擊Finishi按鈕,完成浪傳送簡訊Web Service的引入。此時工程檔案中會增加一個名字為smswebservice0101.pas的檔案,這是Delphi自動產生的Web Service引入申明檔案,不要手工修改他。

圖2

第四步,調用Web Service的簡訊發送介面。在sms表單中,依次增加四個TEdit控制項,一個TButton控制項,一個TMemo控制項和五個TLabel控制項,按圖3進行排列和設定。

圖3

在smsfrm單元的uses語句中包含smswebservice0101,以便改表單中能夠訪問新浪傳送簡訊的Web Service介面。

在發送按鈕onClick事件中寫入以下代碼:

procedure Tsms.Button1Click(Sender: TObject);

begin

Memo1.Text := GetSMSWebServiceSoapPort.sendXml(Edit1.Text,

Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text,''Text'');

end;

注意:Edit1、Edit2、Edit3、Edit4、Edit5分別對應介面上的電訊廠商、使用者名稱、密碼、對方號碼、訊息內容;Memo1對應介面上的反饋。

第五步,使用Web Service的簡訊發送介面進行簡訊發送。編譯、運行smsdemo.prj,在使用者名稱中輸入您在新浪無線上註冊的手機ID、密碼中輸入您在新浪無線上的密碼,然後再輸入對方的手機號碼和訊息內容,單擊發送按鈕,稍候片刻,在反饋資訊框中將會得到該Web Service的反饋資訊,如果一切正常,系統會提示您簡訊發送成功。

小結

從上面的例子我們可以看到,只要理解了Web Services的概念,在Delphi的協助下,開發基於Web Services的應用程式將不是一件很困難的事情。Web Services最適合用於開發跨平台和跨網路進行通訊(因為使用http協議為防火牆所允許)的程式,可以跨越異質架構,聯絡客戶、供應商、企業夥伴以及企業內部之資訊系統,是電子商務B2B、公司資訊等整合的最佳解決方案。各個公司只要把商務邏輯“暴露”出來,成為Web Service,就可以讓任何指定的夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運行,使用什麼開發工具。Web Services是目前很熱門也是正在迅速發展著的一項技術,本文只是作者在學習中的一點小體會,肯定有理解不深刻甚或錯誤的地方,歡迎大家予以指正。 (全文完)

註:本文參考了http://blog.joycode.com/joy/posts/16939.aspx中提供的新浪簡訊Web Service技術,在此表示感謝。

ShowWindow。
單元
System

var CmdShow: Integer;
描述
在程式中,當應用程式建立主視窗時,CmdShow變數包含了 Windows 希望傳遞給 ShowWindow 的參數值。
在庫(DLL)中,CmdShow總是為0。

3.CompilerVersion 常量
指明了Delphi編譯器的版本編號
單元
System

const CompilerVersion = 15.0;
描述
使用CompilerVersion可以測試Delphi編譯器的統配層級。如果你想條件化利用了Delphi語言更新特色的代碼,這會很有用(This is useful if you want to conditionalize code that takes advantage of newer features in the Delphi language)。

4.ExitProcessProc 變數
ExitProcessProc 指定在應用程式關閉(shut down)前最後執行的過程(procedure)。
單元
System

var ExitProcessProc: procedure;
描述
賦值給 ExitProcessProc 來指定你想在應用程式關閉前執行的過程。ExitProcessProc 的值是一個沒有參數的過程。

5.GetFileVersion 函數
返迴文件版本
單元
SysUtils

function GetFileVersion(const AFileName: string): Cardinal;
描述
GetFileVersion返回一個檔案二進位版本號碼中最有意義的32位。AFileName指定檔案名稱,可以使用和LoadLibrary函數相同的路徑搜尋到。

6.GetModuleName 函數
返回給定控制代碼的模組的完全限定名稱(fully qualified name)。
單元
SysUtils

function GetModuleName(Module: HMODULE): string;
描述
調用GetModuleFileName來獲得給定控制代碼的模組的完全限定名稱。
Module是模組的控制代碼。

7.HInstance 變數
控制代碼,由Windows提供給模組(module)。
單元
SysInit

var HInstance: LongWord;
描述
HInstance 容納了由Windows提供的應用程式或庫的執行個體控制代碼

8.HintWindowClass 變數
指定用於顯示協助提示(help hint)的視窗的類。
單元
Forms

var HintWindowClass: THintWindowClass = THintWindow;
描述
當應用程式顯示協助提示(Help Hint)時,它會建立一個HintWindowClass的執行個體來描繪用來顯示提示的視窗。應用程式通過建立THintWindow的衍生類別,然後在應用程式啟動時將衍生類別賦予HintWindowClass變數,能夠定製這個視窗。

9.InitProc 變數
InitProc 是最後一個安裝的初始化過程。
單元
System

var InitProc: Pointer;
描述
賦值給InitProc來指定一個你想在應用程式啟動時執行的過程。InitProc是一個無參數過程。例如:
procedure MyInitProcedure;
...
initialization
InitProc := @MyInitProcedure;
begin
end;
只有一個初始化過程能夠被賦予InitProc變數。如果你的應用程式定義了多個初始化過程,僅最後一個賦予InitProc的會執行。要允許其他初始化過程執行,你必須將過程“連結”到一起,從InitProc的新值中調用原先的值。例如,下面來自ComObj單元的代碼在賦新值前儲存了InitProc原先的值,然後在新賦予的初始化過程中調用儲存在值:
SaveInitProc := InitProc;
InitProc := @InitComObj;

10.IsConsole 變數
指示模組(module)是否作為控制台應用程式編譯。
單元
System

var IsConsole: Boolean;
描述
如果模組作為控制台應用程式編譯,那麼IsConsole變數為True。同時在可執行檔和DLL中將為True(This will be True in both an executable and a DLL)。

11.IsLibrary 變數
指示模組是否是一個DLL。
單元
System

var IsLibrary: Boolean;
描述
如果模組是一個DLL,那麼IsLibrary變數為True。

12.JITEnable 變數
控制何時及時調度器會被調用(Controls when the just-in-time debugger is called)。
單元
System

var JITEnable: Byte = 0;
描述
使用JITEnable來指示什麼類型的異常會觸發及時調試器。
當JITEnable為0(預設值)時,所有的異常將使用應用程式的異常處理機制處理。及時調試器僅當應用程式沒有提供任何捕獲異常的機制時被調用。注意,除了Delphi單元中的初始化和結束化區,任何包含了Forms單元的應用程式都提供了異常處理(通過Application對象),不會觸發及時調試器(Note that any application that includes the Forms unit provides exception handling (via the Application object) for all but the initialization and finalization sections and does not trigger the just-in-time debugger)。
當JITEnable為1時,任何非原生(non-native)異常(使用其他產品編譯的代碼引發的異常)。都會觸發及時調試器。原生異常由應用程式的異常處理機制處理。
當JITEnable大於1時,所有的異常都會觸發及時調試器。
注意:當你安裝IDE時,它會被註冊為及時調試器。如果你安裝了其他帶調試器的工具,他們可能註冊了自己,而覆蓋了IDE的註冊。

13.Languages 函數
列出可用的支援地區(List the locale for which support is available)。
單元
SysUtils

function Languages: TLanguages;
描述
使用由Languages返回的值可以獲得系統支援的關於地區的資訊。這個函數僅可用在Windows平台

14.MainInstance變數
指示主要的可執行檔的執行個體控制代碼。
單元
System

var MainInstance: LongWord;
描述
使用MainInstance來獲得一個應用程式中主要的可執行檔的執行個體控制代碼。在使用了執行階段程式庫或包的應用程式中,當你需要可執行檔而不是庫的控制代碼時,這很有用。
注意:當從一個使用其他工具編譯的可執行檔中運行一個CLX動態連結程式庫(Windows)或者共用對象(Linux)時,不要使用MainInstance。

15.MainThreadID變數
指示當前模組中主執行線程。
單元
System

var MainThreadID: LongWord;
描述
使用MainThreadID來獲得主執行線程(模組初始化時的當前線程)的線程ID。
在調試時,這個主線程ID顯示線上程狀態盒中。
在Windows上,MainThreadID的值和一些Win32API調用所需要的線程ID是相容的。

16.NoErrMsg變數
控制當執行階段錯誤發生時應用程式是否顯示一個錯誤資訊。
單元
System

var NoErrMsg: Boolean = False;
描述
在Windows上,設定NoErrMsg來控制是否有一個訊息顯示來指出有一個執行階段錯誤發生了。當NoErrMsg為false(預設值)時,執行階段錯誤會導致應用程式顯示一個訊息框來提出發生的錯誤的類型。當NoErrMsg為true時,這些訊息將被禁止。
在Linux上,NoErrMsg沒有任何效果。
注意:SysUtils單元會將大部分的執行階段錯誤轉變成異常。如果你的應用程式套件組合含了SysUtils,那麼即使NoErrMsg是false,執行階段錯誤訊息框也未必會顯示。

17.PopupList變數
提供了對發向快顯功能表(popup menu)的Windows訊息的集中處理
單元
Menus
var PopupList: TPopupList;
描述
使用PopupList可以訪問應用程式中的全部快顯功能表或者訪問響應快顯功能表訊息的視窗的視窗控制代碼。PopupList維持了在應用程式中建立的全部快顯功能表組件的列表。這個列表儲存一個集中處理髮向這些快顯功能表的Windows訊息的隱藏視窗的控制代碼。

18.RTLVersion常量
指出Delphi執行階段程式庫的版本號碼。
單元
System

const RTLVersion = 15.0;
描述
使用RTLVersion可以檢查不依賴於編譯器版本層級的Delphi執行階段程式庫的版本號碼。

19.Screen變數
表現一個螢幕裝置
單元
Forms

var Screen: TScreen;
描述
Screen變數是一個表現應用程式運行時所在系統的螢幕的TScreen組件。預設地,應用程式會建立一個基於當前螢幕裝置有關資訊的螢幕組件並將其賦給Screen變數。

20.Win32Platform變數
指定Win32平台的標識符
單元
SysUtils

var Win32Platform: Integer = 0;
描述
Win32Platform用於標識系統啟動並執行Win32平台的類型。這將會是下列值之一:
值 含義
VER_PLATFORM_WIN32s 系統是Win32
VER_PLATFORM_WIN32_WINDOWS 系統是Windows 95
VER_PLATFORM_WN32_NT 系統是Windows NT
Win32Platform僅在Windows上可用。

HTML網頁中調用 方法

〈form target="_blank" action='http://www.ydcom.net/service/S_COMM.asmx/GetCZID' method="POST"〉
〈table cellspacing="0" cellpadding="4" frame="box" bordercolor="#dcdcdc" rules="none" style="border-collapse: collapse;"〉
〈tr〉
〈td class="frmHeader" background="#dcdcdc" style="border-right: 2px solid white;"〉參數〈/td〉
〈td class="frmHeader" background="#dcdcdc"〉值〈/td〉
〈/tr〉
〈tr〉
〈td class="frmText" style="color: #000000; font-weight: normal;"〉sTypeNum:〈/td〉
〈td〉〈input class="frmInput" type="text" size="50" name="sTypeNum"〉〈/td〉
〈/tr〉
〈tr〉
〈td〉〈/td〉
〈td align="right"〉 〈input type="submit" value="調用" class="button"〉〈/td〉
〈/tr〉
〈/table〉
〈/form〉

執行個體:如何調用服務產生18位關索引值

相關文檔: 使用vbscript指令碼調用web服務

ASP中調用方法(SOAP方式)

Dim url,xmlhttp,dom,node,xmlDOC
'根據webservice的測試頁不同的方法構造不同的soap request
SoapRequest = ""& _
""xmlns:xsd="&CHR(34)&"http://www.w3.org/2001/XMLSchema"&CHR(34)&" "& _
"xmlns:soap="&CHR(34)&"http://schemas.xmlsoap.org/soap/envelope/"&CHR(34)&">"& _
""& _
""& _
"311"& _
""& _
""& _
""
url = "http://www.ydcom.net/service/S_COMM.asmx?methodname=GetCZID"
Set xmlDOC =server.CreateObject("MSXML.DOMDocument")
xmlDOC.loadXML(SoapRequest)
Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open "POST",url,false
xmlhttp.setRequestHeader "Content-Type", "text/xml;charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", "http://www.ydcom.net/service/SrvCOMM/S_COMM/GetCZID"
xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest)
xmlhttp.Send(xmlDOC)

If xmlhttp.Status = 200 Then
xmlDOC.load(xmlhttp.responseXML)
Response.Write xmlhttp.Status&"
"
Response.Write xmlhttp.StatusText&"
執行結果為:"
Response.Write xmlDOC.getElementsByTagName("GetCZIDResult")(0).text
else
Response.Write xmlhttp.Status&"
"
Response.Write xmlhttp.StatusText
end if
%>

執行個體:如何使用asp調用服務產生18位關索引值 asp源檔案代碼

說明:總的來講採用webservice的列表頁說明來構造不同的SoapRequest,然後,
從返回xmlDoc中取傳回值xmlDOC.getElementsByTagName

ASP中調用方法(HTTP方式)

Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
Set xmlDOC =Server.CreateObject("MSXML.DOMDocument")
strWebserviceURL = "http://www.ydcom.net/service/S_COMM.asmx/GetCZID"
'設定參數及其值
strRequest = "sTypeNum=311"
objHTTP.Open "POST", strWebserviceURL, False
'設定這個Content-Type很重要
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.SetRequestHeader("Content-Length: 30")
objHTTP.Send(strRequest)
bOK = xmlDOC.load(objHTTP.responseXML)
'看看狀態值
if objHTTP.Status=200 then
xmlStr = xmlDOC.xml
Response.Write xmlStr
else
Response.Write objHTTP.Statu&"
"
Response.Write objHTTP.StatusText
end if
%>

執行個體:如何使用asp調用服務產生18位關索引值 asp源檔案代碼

VB6中調用方法

Dim strxml As String
Dim str As String
str = Text2.Text
'定義soap訊息
strxml = "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" & str &
""
'定義一個http對象,一邊向伺服器發送post訊息
Dim h As MSXML2.ServerXMLHTTP40
'定義一個XML的文檔對象,將手寫的或者接受的XML內容轉換成XML對象
Dim x As MSXML2.DOMDocument40
'初始化XML對象
Set x = New MSXML2.DOMDocument40
'將手寫的SOAP字串轉換為XML對象
x.loadXML strxml
'初始化http對象
Set h = New MSXML2.ServerXMLHTTP40
'向指定的URL發送Post訊息
h.open "POST", "http://localhost/TestWebService/Service1.asmx", False
h.setRequestHeader "Content-Type", "text/xml"
h.send (strxml)
While h.readyState <> 4
Wend
'顯示返回的XML資訊
Text1.Text = h.responseText
'將返回的XML資訊解析並且顯示傳回值
Set x = New MSXML2.DOMDocument40
x.loadXML Text1.Text
Text1.Text = x.childNodes(1).Text

VB.NET中調用方法

1,首先添加web引用,地址為:http://www.ydcom.net/service/s_comm.asmx

2,定義:dim sCom as New net.ydcom.www.S_COMM

3,調用:dim strCZID as string = sComm.GetCZID("313")

執行個體:如何使用VB.NET調用服務產生18位關索引值 VB.NET源檔案代碼

PB.NET(PB9)中調用方法

SoapConnection conn
Test_wsservice1soap sCom
long rVal
//string str_endpoint
//str_endpoint = "http://www.ydcom.net/service/s_comm.asmx?WSDL"
conn = create SoapConnection
rVal = Conn.CreateInstance(sCom, "test_wsservice1soap")
sle_1.text = sCom.GetCZID("313"))
destroy conn

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.