可以的,把項(xiàng)目的類(lèi)型設(shè)成類(lèi)庫(kù),將所有的函數(shù)用Public修飾附封裝在類(lèi)里面,生成dll文件。這樣別人就可以在別人項(xiàng)目屬性的引用頁(yè)里面添加對(duì)你的dll文件的引用,然后導(dǎo)入命名空間,直接使用了。
內(nèi)丘網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,內(nèi)丘網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為內(nèi)丘上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的內(nèi)丘做網(wǎng)站的公司定做!
比如說(shuō),在一個(gè)項(xiàng)目里:
NameSpace Controller
Public Class ControlMachine
Public Sub Boot()
End Sub
Public Sub Shutdown()
End Sub
End Class
End NameSpace
進(jìn)入另一個(gè)項(xiàng)目的項(xiàng)目屬性,進(jìn)入引用頁(yè),添加到那個(gè)dll文件的引用。在代碼中:
Imports Controller '加在代碼文檔的最頂端
使用:
Dim controller As New ControlMachine
controller.Boot()
controller.Shutdown()
希望你能了解,不懂再追問(wèn)
一、NT服務(wù)程序
所謂NT服務(wù),實(shí)際上就是一個(gè)可以在系統(tǒng)啟動(dòng)時(shí)自動(dòng)在一定身份下啟動(dòng)的伴隨系統(tǒng)長(zhǎng)時(shí)間存在的進(jìn)程。象FTP server、HTTP server、脫機(jī)打印等都是采用NT服務(wù)的形式提供的。這實(shí)際上類(lèi)似Unix的root daemon進(jìn)程。NT服務(wù)歸納起來(lái),NT服務(wù)又以下幾個(gè)特征:
1、可以自啟動(dòng),不需要交互啟動(dòng)。這對(duì)于服務(wù)器來(lái)說(shuō)是一個(gè)重要的特征。當(dāng)然,你可以決定服務(wù)是否自啟動(dòng),甚至可以屏蔽某個(gè)服務(wù)。
2、NT服務(wù)沒(méi)有用戶(hù)界面,基本上類(lèi)似一個(gè)DOS 程序,因?yàn)镹T服務(wù)必須長(zhǎng)時(shí)間運(yùn)行,所以不想普通win32進(jìn)程一樣有自己的界面。但是NT服務(wù)可以同用戶(hù)有界面交互,這是一類(lèi)特殊的服務(wù)進(jìn)程??梢酝ㄟ^(guò)NT的任務(wù)管理器來(lái)看到服務(wù)進(jìn)程。
3、NT服務(wù)通過(guò)SCM(Services Control Manager)接口來(lái)管理,安裝、啟動(dòng)、停止、撤除等都需要SCM的接口功能來(lái)進(jìn)行??刂泼姘宓姆?wù)控制器就是利用SCM接口來(lái)管理系統(tǒng)中的所有服務(wù)的。實(shí)際上,還有一些可以控制服務(wù)的程序或者命令,有net.exe 、服務(wù)器管理器等 、SCM.exe等。
4、這些進(jìn)程都以一定的身份運(yùn)行,以方便進(jìn)行服務(wù)器資源的存取。一般情況下使用域中的LocalSystem賬號(hào)運(yùn)行,此賬號(hào)對(duì)本機(jī)上的大多數(shù)資源(除非特別禁止)有完全的存取權(quán)限,這樣可以保證服務(wù)程序的“強(qiáng)大”。但是,也有些服務(wù)采用特別的賬號(hào)運(yùn)行,你也可以特別設(shè)定一個(gè)服務(wù)的帳號(hào)。
5、由系統(tǒng)自動(dòng)以線(xiàn)程方式運(yùn)行,一般情況下不過(guò)多占用系統(tǒng)資源,這同普通的進(jìn)程有所區(qū)別,如果不采用線(xiàn)程方式,一般進(jìn)程往往消耗整個(gè)CPU資源。一般需要時(shí)時(shí)存在,又不能過(guò)多消耗資源的任務(wù)以服務(wù)來(lái)實(shí)現(xiàn)最合適。
二、服務(wù)控件
一般認(rèn)為編寫(xiě)NT服務(wù)需要使用C/C++來(lái)實(shí)現(xiàn),VC6利用ATL向?qū)?lái)提供一個(gè)基本的服務(wù)框架。具體實(shí)現(xiàn)步驟為:FileàNew…àATL COM AppWizardàserviceàFinish.但是使用VC編寫(xiě)NT服務(wù)需要編寫(xiě)太多的代碼,這也意味著需要太多的調(diào)試、維護(hù)。實(shí)際上,NT服務(wù)不是必須由C/C++才可以編寫(xiě)的,實(shí)際上可以由任何能夠?qū)崿F(xiàn)上一節(jié)幾個(gè)特點(diǎn)的任何語(yǔ)言實(shí)現(xiàn),包括VB。
VB編寫(xiě)服務(wù)有那些好處呢,至少可以列出以下幾條:
1、編碼簡(jiǎn)單,熟悉Vb語(yǔ)法的任何人理解本文后都可編寫(xiě)。
2、意味著修改服務(wù)實(shí)現(xiàn)的邏輯簡(jiǎn)單,維護(hù)簡(jiǎn)單。
3、可以利用幾乎大多數(shù)的Vb中的組件功能,編寫(xiě)一個(gè)強(qiáng)大的服務(wù),譬如ado等,如果用VC來(lái)實(shí)現(xiàn),相信任何人都會(huì)發(fā)怵。
4、(牽強(qiáng)一點(diǎn))可以證明Vb在Bill的天空下是多么強(qiáng)大。
那么,Vb如何實(shí)現(xiàn)NT服務(wù)編寫(xiě)呢?據(jù)我所至,至少有兩種途徑:
1、 按照C/C++的思路利用WinAPI來(lái)實(shí)現(xiàn)。
2、 利用組件按照Vb傳統(tǒng)方式實(shí)現(xiàn)。
如果利用方法1實(shí)際上是照搬C/C++的套路,如果有更好的路子可以實(shí)現(xiàn),相信任何人都不會(huì)走這條“絕路”,因?yàn)橄鄬?duì)于其他語(yǔ)言來(lái)說(shuō)這種編程完全喪失了Vb自身得特點(diǎn)同時(shí)也沒(méi)有獲得其他語(yǔ)言的任何優(yōu)勢(shì)。在這里,想告訴大家的是利用OCX來(lái)實(shí)現(xiàn)一個(gè)服務(wù)。如果您在MSDN中搜索Samples/msdn/techart/4920/,您可以看到一個(gè)已經(jīng)編寫(xiě)好的vc5的工程文件。編譯這個(gè)工程實(shí)際上會(huì)得到一個(gè)ntsvc.ocx的。如果您對(duì)C/C++不熟悉,可以從 下載一個(gè)ntsvc.ocx,此OCX是我從backoffice碟中獲得的,將其拷貝到/winnt/system32/下,利用regsvr32 ntsvc.ocx命令注冊(cè)之。這樣,您的Vb就可以從project/components…引出的對(duì)話(huà)框列表中看到名為“Microsoft NT Service Control”項(xiàng)。此組件擁有我們創(chuàng)建一個(gè)服務(wù)的基本的功能,如果要編寫(xiě)一個(gè)NT服務(wù),我們將其拖進(jìn)我們的窗體,然后設(shè)定其屬性,調(diào)用其與系統(tǒng)、注冊(cè)表、SCM交互的功能就可以實(shí)現(xiàn)完成一個(gè)服務(wù)了。
我們首先了解這個(gè)組件的屬性,并向大家解釋這些屬性的用法:
Account String ,賬號(hào)屬性,即本NT服務(wù)在哪一個(gè)NT域賬號(hào)下運(yùn)行,缺省是LocalSystem賬號(hào),實(shí)際上大多數(shù)的NT服務(wù)都可以在此賬號(hào)下安全圓滿(mǎn)的運(yùn)行。
ControlsAccepted Long,此服務(wù)接受那些SCM控制,為以下值:
0 允許Start 以及 Stop .
2 允許Pause 以及 Continue .
4 允許 shutdown 。
其他值,用戶(hù)自定義的某些事件.
利用這個(gè)屬性,您可以自己決定NT服務(wù)進(jìn)程某個(gè)(譬如某個(gè)不可中斷操作)時(shí)刻是否允許SCM停止、暫停、啟動(dòng)等操作。
Dependencies String ,如果您編寫(xiě)的服務(wù)依賴(lài)于某個(gè)或者某些服務(wù)才能正常運(yùn)行,您必須在注冊(cè)服務(wù)時(shí)指定依賴(lài)的服務(wù)列表。Dependencies按照依賴(lài)順序以chr(0)來(lái)分隔多個(gè)服務(wù),最后必須以?xún)蓚€(gè)chr(0)結(jié)束。(大家可以看到這是一個(gè)C/C++的存在痕跡)
DisplayName String,顯示名,NT服務(wù)以何種名字顯示給察看者。
Interactive Boolean ,是否允許有同桌面用戶(hù)有交互的部分。
LoadOrderGroup String,同Dependencies相關(guān),決定如果本服務(wù)啟動(dòng)之前,那些服務(wù)必須啟動(dòng),格式也類(lèi)似,也以chr(0)分割,連續(xù)的兩個(gè)chr(0)結(jié)尾。
Password String,服務(wù)啟動(dòng)的口令,如果使用缺省得賬號(hào),就沒(méi)有必要設(shè)定服務(wù)啟動(dòng)的帳號(hào)。
ServiceName String,服務(wù)名,如果使用net.exe來(lái)控制服務(wù),net.exe的指定那一個(gè)服務(wù)的參數(shù)就是此屬性中的字符串。
StartMode 枚舉型,具體為:
vcStartAutomatic 2 服務(wù)可以自己?jiǎn)?dòng)
svcStartManual 3 服務(wù)手動(dòng)啟動(dòng)
svcStartDisabled 4 服務(wù)不能自啟動(dòng)
另外有一個(gè)Debug屬性,不做討論。
我們要將一個(gè)VB程序當(dāng)作一個(gè)NT服務(wù),必須向系統(tǒng)作一些“申請(qǐng)”,而相應(yīng)的工作VB是無(wú)法很好的完成的。所以,NTSVC.ocx提供了相應(yīng)的方法留作我們想系統(tǒng)傳遞相關(guān)信息。
Install ,將當(dāng)前Vb程序安裝成NT服務(wù),在此之前,您必須至少設(shè)置DisplayName, ServiceName, ControlsAccepted以及StartMode等屬性。除此之外您可能還要設(shè)置Account、Password、LoadOrderGroup、Dependencies等。這些信息的設(shè)置正確與否,決定您的服務(wù)程序能否正常啟動(dòng)運(yùn)行。
Uninstall, 將當(dāng)前NTSVC.ocx指定的服務(wù)從系統(tǒng)注冊(cè)表中刪除。NT服務(wù)取決于系統(tǒng)服務(wù)注冊(cè)表的設(shè)定,這是一個(gè)眾所周知的秘密。
StartService,將指定的服務(wù)啟動(dòng),如果該服務(wù)注冊(cè)了。
StopService,停止服務(wù),如果服務(wù)正在運(yùn)行。
LogEvent ,記錄服務(wù)事件。服務(wù)運(yùn)行中,可能發(fā)生錯(cuò)誤以及意料不到的事件,這些可以通過(guò)此方法記錄下來(lái),供管理員通過(guò)“事件察看器”察看相關(guān)的信息,以最優(yōu)化服務(wù)。此方法有三個(gè)參數(shù)event, id, message. Event指發(fā)生的事件類(lèi)型,可以設(shè)為以下值:
svcEventError 1 錯(cuò)誤事件
svcEventWarning 2 警告事件.
svcEventInformation 4 提供參考信息.
svcEventAuditSuccess 8 審計(jì)成功.
svcEventAuditFailure 10 審計(jì)失敗
除了以上方法,可能用戶(hù)還需要讀寫(xiě)注冊(cè)表,此控件還提供了注冊(cè)表的訪(fǎng)問(wèn)方法:
DeleteSetting (section[, key])
GetAllSettings(section)
GetSetting(section, key[, default])
SaveSetting(section, key, setting).
三、編寫(xiě)服務(wù)
了解以上內(nèi)容,下面我們開(kāi)始來(lái)設(shè)計(jì)一個(gè)服務(wù),通過(guò)例子,讓大家理解如何在VB中編寫(xiě)服務(wù).
在此之前,我們決定寫(xiě)一個(gè)什么樣的服務(wù)。我參考C++Build中的一個(gè)例子,寫(xiě)一個(gè)不斷報(bào)警的服務(wù)進(jìn)程。該進(jìn)程啟動(dòng)后在后臺(tái)不斷間隔5秒發(fā)出Beep叫,這可以讓大家更深切知道此服務(wù)的存在,雖然有些令人討厭。服務(wù)的名字為VBBeepSVC,在SCM中顯示為T(mén)he VB NT SVC View。
跟著我一起來(lái)吧!
1、創(chuàng)建工程,設(shè)定相關(guān)使用到的控件。
所有的Vb的控件必須有一個(gè)Form作為載體,所以,首先我們創(chuàng)建一個(gè)標(biāo)準(zhǔn)工程,選擇菜單project—Components…,然后選取(Microsoft NT Service Control),會(huì)在Toolbar中出現(xiàn)NT服務(wù)控件。再拖一個(gè)Timer控件到Form上。然后保存一下?;旧?,創(chuàng)建過(guò)程完成。
2、設(shè)定控件屬性。
選中NtSvc.ocx實(shí)例,在屬性欄中設(shè)定:DisplayName: The VB NT SVC View,ServiceName: VBBeepSVC,StartMode:3(手動(dòng)啟動(dòng)服務(wù)).其他的就缺省吧。
由于我們希望每個(gè)5秒就beep一次,所以我們必須依靠一種定時(shí)機(jī)制來(lái)實(shí)現(xiàn),所以我們將timer的Interval設(shè)定位5000毫秒。
以上屬性的設(shè)定視您的需要而定,我只是說(shuō)在我的VBBeepSVC中如此設(shè)定足夠了。
3、編寫(xiě)代碼,實(shí)現(xiàn)服務(wù)邏輯以及服務(wù)安裝、撤除。
因?yàn)榉?wù)程序?qū)嶋H上是一個(gè)Exe文件,并且需要自己解決安裝、撤除問(wèn)題,因此需要在此程序中加入利用NT服務(wù)控件來(lái)實(shí)現(xiàn)安裝、撤除問(wèn)題。那么,應(yīng)當(dāng)在什么時(shí)候進(jìn)行了。VB程序啟動(dòng)時(shí)正時(shí)Form裝載的時(shí)候,所以,我們需要在窗體的Load事件中加入一些代碼:
On Error GoTo Err_Load ‘如果出現(xiàn)錯(cuò)誤就紀(jì)錄以供參考
Dim strDisplayName As String
strDisplayName = NTService1.DisplayName
If Command = "-install" Then ‘當(dāng)啟動(dòng)時(shí)帶上 –install的參數(shù)時(shí)
NTService1.Interactive = True
If NTService1.Install Then
Call NTService1.SaveSetting("Parameters", "TimerInterval", "1000") ‘系統(tǒng)參數(shù)存儲(chǔ)
MsgBox strDisplayName " 安裝成功!"
Else
MsgBox strDisplayName " 安裝失敗"
End If
End ‘終止安裝
Else
If Command = "-uninstall" Then ‘如果啟動(dòng)時(shí)帶上 撤除參數(shù)
If NTService1.Uninstall Then
MsgBox strDisplayName " 撤除成功"
Else
MsgBox strDisplayName " 撤除失敗"
End If
End ‘終止撤除
Else
End If
End If
‘假若不是安裝或撤除操作,即為啟動(dòng)服務(wù)
Timer1.Interval = CInt(NTService1.GetSetting("Parameters", "TimerInterval", "2000"))
‘使用Timer控件來(lái)模擬服務(wù)的線(xiàn)程特性
NTService1.ControlsAccepted = svcCtrlPauseContinue ‘接受暫停、停止操作,意味著需要為此編碼
NTService1.StartService ‘設(shè)置好參數(shù)后啟動(dòng)服務(wù)
Err_Load:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description) ‘svcMessageError為NT服務(wù)控件的錯(cuò)誤值
4、添加控制服務(wù)的代碼。
盡管服務(wù)的連續(xù)線(xiàn)程等特性是依賴(lài)Timer實(shí)現(xiàn)的,但是服務(wù)的控制卻是有SCM接口向每一個(gè)服務(wù)發(fā)出的,表現(xiàn)在VB服務(wù)程序中為NT服務(wù)控件捕獲到相關(guān)的事件發(fā)生,我們就應(yīng)當(dāng)在這些事件中根據(jù)具體的情況響應(yīng),決定能不能、如何控制服務(wù)邏輯。當(dāng)然,具體的邏輯在Timer事件中表現(xiàn),但是通過(guò)改變NT服務(wù)控件和Timer控件均支持的全局變量,可以實(shí)現(xiàn)控制服務(wù)的邏輯實(shí)現(xiàn)。具體代碼演示:
Private Sub NTService1_Control(ByVal EventID As Long)
On Error GoTo Err_Control
‘在此加入一些自己的處理邏輯,當(dāng)然也可以如本例一樣空缺
Err_Control:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description) ‘紀(jì)錄
End Sub
Private Sub NTService1_Pause(Success As Boolean)
On Error GoTo Err_Pause
Timer1.Enabled = False ‘禁止Timer事件,因此也停止了服務(wù)的發(fā)生
Call NTService1.LogEvent(svcEventError, svcMessageError, "Service paused")
Success = True ‘返回給SCM命令發(fā)出者,表示服務(wù)成功停止
Err_Pause:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description)
End Sub
Private Sub NTService1_Start(Success As Boolean)
On Error GoTo Err_Start
Success = True
Timer1.Enabled = True ‘允許服務(wù)邏輯進(jìn)行
Err_Start:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description)
End Sub
Private Sub NTService1_Stop()
On Error GoTo Err_Stop
Unload Me ‘撤除Form,自然Timer也不存在,服務(wù)邏輯停止了
Err_Stop:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description)
End Sub
5、編寫(xiě)服務(wù)邏輯。
具體就是在Timer事件中,根據(jù)約定寫(xiě)一些服務(wù)細(xì)節(jié)。本例中就是發(fā)出Been,但是考慮到對(duì)SCM命令的響應(yīng),所以需要編碼為:
On Error GoTo Err_Timer
Beep ‘此處即具體的服務(wù)細(xì)節(jié)
Err_Timer:
Call NTService1.LogEvent(svcMessageError, svcEventError, "[" Err.Number "] " Err.Description)
End Sub
6、編譯安裝、測(cè)試
如果以上沒(méi)有什么錯(cuò)誤的話(huà),現(xiàn)在可以編譯程序了。假設(shè)我們得到的服務(wù)程序的文件名為:VBBeepSVC.exe,我們需要通過(guò)以下命令進(jìn)行安裝:
d:/vbprog/VBBeepSVC –install
如果需要撤除已經(jīng)安裝的服務(wù),則:
d:/vbprog/VBBeepSVC –uninstall
安裝完后,打開(kāi)控制面板的“服務(wù)”(win2000中在“管理工具”),好了,看到其中的NT服務(wù)列表中包含我們加入的服務(wù),顯示為:“The VB NT SVC View”,我們可以類(lèi)似啟動(dòng)其他任何服務(wù)一樣啟動(dòng)、停止、暫停此服務(wù)。啟動(dòng)服務(wù)時(shí),我們會(huì)聽(tīng)到服務(wù)發(fā)出的討厭的beep聲音。我們的測(cè)試完成。
四、VB編寫(xiě)服務(wù)的幾個(gè)說(shuō)明:
1、首先聲明:VB編寫(xiě)服務(wù)是一種嘗試,技術(shù)研究,并非提倡所有服務(wù)都要用VB寫(xiě)才對(duì)頭。同理,也說(shuō)明了服務(wù)非VC寫(xiě)不可。
2、VB寫(xiě)的服務(wù)僅適合win32服務(wù),不適合NT底層服務(wù)。
3、VB的優(yōu)勢(shì)在ActiveX控件,NT服務(wù)中我們可以使用絕大多數(shù)控件來(lái)完成我們的服務(wù)邏輯,譬如涉及數(shù)據(jù)庫(kù)操作,我們可以使用ADO組件,這方面,同VC相比,VB具有天然的優(yōu)勢(shì)。
4、做好服務(wù)內(nèi)部的錯(cuò)誤事件記載,只有用好這一點(diǎn),才能夠真正符合服務(wù)編寫(xiě)規(guī)范,也方便我們的除錯(cuò)。
5、最后一點(diǎn),本文僅供參考,如有錯(cuò)誤以及錯(cuò)誤引起的后果,本人概不負(fù)責(zé).
轉(zhuǎn)載
WebService目前可是目前計(jì)算機(jī)界一個(gè)非常流行的技術(shù)了 以至于有些人把WebService列入目前最熱門(mén)的十大技術(shù)之一 的確隨著互聯(lián)網(wǎng)的廣泛應(yīng)用和發(fā)展 尤其是電子商務(wù)的發(fā)展 出于互聯(lián)網(wǎng)上各種復(fù)雜的應(yīng)用系統(tǒng)和對(duì)更高安全性的要求 WebService的橫空出世的確滿(mǎn)足了當(dāng)前這些的要求和需要 其中的原因在下文中有詳細(xì)的介紹 本文的主要內(nèi)容是簡(jiǎn)要介紹一下WebService的相關(guān)知識(shí) 以及使用VisualBasic Net實(shí)現(xiàn)WebServices的具體方法和典型步驟
一 WebService為何物 我們?yōu)槭裁葱枰?/p>
WebService的主要功能就是可以實(shí)現(xiàn)實(shí)現(xiàn)跨平臺(tái)的功能調(diào)用 同時(shí)由于WebService中使用XML來(lái)進(jìn)行數(shù)據(jù)交換 所以在使用WebService時(shí)不用擔(dān)心防火墻的影響 由于WebService集成了各種功能 并提供了一個(gè)友好的界面 所以在WebService能夠?qū)崿F(xiàn)軟件的重用
另外WebService的調(diào)用非常簡(jiǎn)單 簡(jiǎn)而言之調(diào)用互聯(lián)網(wǎng)上的WebService就如同調(diào)用本地的組件一樣簡(jiǎn)單 就是通過(guò)HTTP協(xié)議來(lái)調(diào)用互聯(lián)網(wǎng)上的組件 至于具體的調(diào)用方法 請(qǐng)參閱本文第五節(jié)第七段的內(nèi)容 所以Web Service就是互聯(lián)網(wǎng)上的組件調(diào)用
二 和Web Service相關(guān)的標(biāo)準(zhǔn) 協(xié)議
Web Service是通過(guò)一系列標(biāo)準(zhǔn)和協(xié)議來(lái)保證和程序之間的動(dòng)態(tài)連接和實(shí)現(xiàn)其安全調(diào)用的 其中主要的標(biāo)準(zhǔn)和協(xié)議是 XML WSDL SOAP HTTP UDDI 下面就簡(jiǎn)要介紹這些標(biāo)準(zhǔn)和協(xié)議
XML Web Service之間和Web Service和應(yīng)用程序之間都是采用XML進(jìn)行數(shù)據(jù)交換的 Web Service由于基于了XML 這樣Web Service在具備XML帶來(lái)的優(yōu)勢(shì)的同時(shí) 也擁有了由于XML所帶來(lái)的缺點(diǎn) 其中XML所帶來(lái)的最重要缺點(diǎn)就是Web Service將大量的占有CPU的資源 因?yàn)閄ML數(shù)據(jù)要經(jīng)過(guò)多步處理才能被系統(tǒng)使用 所以 即使調(diào)用一個(gè)功能較小的Web Service 也會(huì)感覺(jué)速度很慢 所以網(wǎng)絡(luò)中對(duì)運(yùn)行Web Service的主機(jī)要求是很高的
HTTP 應(yīng)用程序是提供HTTP協(xié)議來(lái)調(diào)用Web Service的 所以HTTP在Web Service調(diào)用過(guò)程中 起著通道的作用
WSDL 是Web Service描述語(yǔ)言的簡(jiǎn)寫(xiě) 它是XML格式 其作用是描述Web Service 指示應(yīng)用程序和與Web Servie交互的方法 當(dāng)實(shí)現(xiàn)了某種Web Service服務(wù)時(shí) 為了讓別的程序調(diào)用 就必須告訴此Web Service的接口 如 服務(wù)名稱(chēng) 服務(wù)所在的機(jī)器名稱(chēng) 監(jiān)聽(tīng)端口號(hào) 傳遞參數(shù)的類(lèi)型等等 WSDL就是規(guī)定了有關(guān)Web Services描述的標(biāo)準(zhǔn)
UDDI 是Universal Description Discovery and Integration的縮寫(xiě) 簡(jiǎn)單說(shuō) UDDI用于集中存放和查找WSDL描述文件 起著目錄服務(wù)器的作用
SOAP 是 Simple Object Access Protocol 的縮寫(xiě) 即 簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議 SOAP是一種消息傳遞的協(xié)議 它規(guī)定了Web Services之間傳遞信息的方式
三 本文章的程序設(shè)計(jì) 調(diào)試和運(yùn)行的環(huán)境
( ) 微軟公司視窗 中文企業(yè)版
( ) Visual Studio Net 企業(yè)構(gòu)建版 Net FrameWork SDK 版本號(hào)
( ) IIS服務(wù)啟動(dòng)
四 Visual Basic Net實(shí)現(xiàn)Web Service
Net 的大的推動(dòng)了Web Service的發(fā)展 而Visual Studio Net的出現(xiàn)又極大的推動(dòng)了Web Service的的廣泛應(yīng)用 在Visual Studio Net推出之前 編寫(xiě)一個(gè)Web Service是一項(xiàng)非常復(fù)雜的工作 同樣調(diào)用這個(gè)Web Service也十分麻煩 由于Visual Studio Net對(duì)Web Service提供了較強(qiáng)的支持 很多細(xì)致 煩雜的工作都由Visual Studio Net自動(dòng)完成了 這樣就使得上述工作變得非常簡(jiǎn)單 甚至不了解Web Service和其相關(guān)的標(biāo)準(zhǔn) 協(xié)議 也可以使用Visual Studio Net編寫(xiě)Web Service 并使用這個(gè)Web Service 下面就來(lái)用Visual Basic Net實(shí)現(xiàn)一個(gè)Web Service 此Web Service和數(shù)據(jù)庫(kù)相關(guān) 數(shù)據(jù)庫(kù)類(lèi)型選用的是Sql Server 此Web Service提供了二個(gè)函數(shù)功能調(diào)用 其一名稱(chēng)為Binding 用以實(shí)現(xiàn)數(shù)據(jù)綁定 其二名稱(chēng)為Update 用以更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)
以下就是Visual Basic Net實(shí)現(xiàn)此Web Service的具體步驟
啟動(dòng)Visual Studio Net
選擇菜單「文件」|「新建」|「項(xiàng)目」后 彈出「新建項(xiàng)目」對(duì)話(huà)框
將「項(xiàng)目類(lèi)型」設(shè)置為「Visual Basic項(xiàng)目」
將「模板」設(shè)置為「ASP NET Web 服務(wù)」
在「位置」的文本框中輸入//localhost/UpdateDataWebService 后 單擊「確定」按鈕 這樣在Visual Studio Net就會(huì)計(jì)算機(jī)Internet信息服務(wù)的默認(rèn)目錄中創(chuàng)建一個(gè)名稱(chēng)為 UpdateDataWebService 文件夾 里面存放的是此項(xiàng)目的文件 具體如圖 所示
圖 創(chuàng)建Web Service項(xiàng)目對(duì)話(huà)框
選中「解決方案資源管理器」中的 Service a *** x 文件 單擊鼠標(biāo)右鍵 在彈出的菜單中選擇「查看代碼」 則進(jìn)入Service a *** x vb的編輯界面
在Service a *** x……vb的首部 在導(dǎo)入命名空間的代碼區(qū)中添加下列代碼 下列代碼作用是導(dǎo)入命名空間System Data SqlClient
Imports System Data SqlClient
在Service a *** x……vb文件的 Public Class Service Inherits System Web Services WebService 代碼后 添加下列代碼 下列代碼是在Web Service中定義二個(gè)功能調(diào)用
WebMethod ( ) Public Function Binding ( ) As DataSet Dim con As New SqlConnection ( Server = localhost ; uid = sa ; pwd = ; database = northwind ) Dim daCust As New SqlDataAdapter ( Select * From Customers con ) Dim ds As New DataSet ( ) daCust Fill( ds Cust ) Return dsEnd FunctionWebMethod ( ) Public Function Update ( ByVal ds As DataSet ) As DataSet Dim con As New SqlConnection ( Server = localhost ; uid = sa ; pwd = ; database = northwind ) Dim daCust As New SqlDataAdapter ( Select * From Customers con ) Dim cbCust As New SqlCommandBuilder ( daCust ) daCust Update ( ds Cust ) Return dsEnd Function
保存上述的修改 一個(gè)簡(jiǎn)單的操作Sql Server數(shù)據(jù)庫(kù)的Web Service就完成了 此時(shí)單擊快捷鍵F 此Web Service就開(kāi)始運(yùn)行 并可以對(duì)外提供服務(wù)了 具體如圖 所示:
圖 :Web Service提供服務(wù)是的界面
Service a *** x vb的代碼清單如下:
Imports System Web ServicesImports System Data SqlClientWebService ( Namespace := ) _Public Class Service Inherits System Web Services WebServiceWebMethod ( ) Public Function Binding ( ) As DataSet Modify this Connection string to use your SQL Server and log on Dim con As New SqlConnection ( Server=localhost;uid=sa;pwd=;database=northwind ) Dim daCust As New SqlDataAdapter ( Select * From Customers con ) Dim ds As New DataSet ( ) daCust Fill ( ds Cust ) Return dsEnd FunctionWebMethod ( ) Public Function Update ( ByVal ds As DataSet ) As DataSet Dim con As New SqlConnection ( Server=localhost;uid=sa;pwd=;database=northwind ) Dim daCust As New SqlDataAdapter ( Select * From Customers con ) Dim cbCust As New SqlCommandBuilder ( daCust ) daCust Update ( ds Cust ) Return dsEnd Function#Region Web 服務(wù)設(shè)計(jì)器生成的代碼 Public Sub New ( ) MyBase New ( ) 該調(diào)用是 Web 服務(wù)設(shè)計(jì)器所必需的 InitializeComponent ( ) 在 InitializeComponent ( ) 調(diào)用之后添加您自己的初始化代碼End Sub Web 服務(wù)設(shè)計(jì)器所必需的Private ponents As System ComponentModel IContainer 注意 以下過(guò)程是 Web 服務(wù)設(shè)計(jì)器所必需的 可以使用 Web 服務(wù)設(shè)計(jì)器修改此過(guò)程 不要使用代碼編輯器修改它 System Diagnostics DebuggerStepThrough ( ) Private Sub InitializeComponent ( ) ponents = New System ComponentModel Container ( )End SubProtected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) CODEGEN: 此過(guò)程是 Web 服務(wù)設(shè)計(jì)器所必需的 不要使用代碼編輯器修改它 If disposing Then If Not ( ponents Is Nothing ) Thenponents Dispose ( ) End IfEnd IfMyBase Dispose ( disposing )End Sub#End Region Web 服務(wù)示例 HelloWorld ( ) 示例服務(wù)返回字符串 Hello World 若要生成項(xiàng)目 請(qǐng)取消注釋以下行 然后保存并生成項(xiàng)目 若要測(cè)試此 Web 服務(wù) 請(qǐng)確保 a *** x 文件為起始頁(yè) 并按 F 鍵 WebMethod ( ) Public Function HelloWorld ( ) As String HelloWorld = Hello World End FunctionEnd Class
下面就來(lái)介紹Visual Basic Net中使用這個(gè)Web Service提供的服務(wù)來(lái)更新數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
五 在Visual Basic Net調(diào)用Web Service提供的服務(wù):
當(dāng)Web Service已經(jīng)處于對(duì)外提供服務(wù)狀態(tài) Visual Basic Net就可以通過(guò)HTTP 調(diào)用 來(lái)使用這些服務(wù)了 當(dāng)然前提是要了解Web Service對(duì)外提供服務(wù)所對(duì)應(yīng)的URL 當(dāng)了解到Web Service對(duì)應(yīng)的URL后 Visual Basic Net就像是使用本地的類(lèi)庫(kù)一樣使用Web Service中提供的各種功能 所以有些人說(shuō) Web Service從實(shí)質(zhì)上說(shuō) 就是通過(guò)HTTP調(diào)用遠(yuǎn)程組件的一種方式 在Visual Basic Net具體實(shí)現(xiàn)加入Web Service可參閱下面步驟中的第七步
在下面介紹的這個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序是通過(guò)使用上面的Web Service中提供的 Binding 服務(wù) 對(duì)程序中DataGrid組件實(shí)現(xiàn)數(shù)據(jù)綁定 提供使用Web Service中提供的 Update 服務(wù) 通過(guò)程序中的DataGrid來(lái)修改數(shù)據(jù)庫(kù) 下面就是Visual Basic Net中使用Web Service提供服務(wù)來(lái)編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序的具體步驟 :
啟動(dòng)Visual Studio Net
選擇菜單【文件】|【新建】|【項(xiàng)目】后 彈出【新建項(xiàng)目】對(duì)話(huà)框
將【項(xiàng)目類(lèi)型】設(shè)置為【Visual Basic項(xiàng)目】
將【模板】設(shè)置為【W(wǎng)indows應(yīng)用程序】
在【名稱(chēng)】文本框中輸入【TestWebService】
在【位置】的文本框中輸入【E:\VS NET項(xiàng)目】 然后單擊【確定】按鈕 這樣在 E:\VS NET項(xiàng)目 中就產(chǎn)生了名稱(chēng)為 TestWebService 文件夾 里面存放的就是TestWebService項(xiàng)目的所有文件
選擇【解決方案資源管理器】|【引用】后 單擊鼠標(biāo)右鍵 在彈出的菜單中選擇【添加Web 引用】 在彈出的【添加Web引用】對(duì)話(huà)框中的【地址】文本框中輸入 后 單擊回車(chē)鍵后 可得圖 所示界面 單擊圖 中【添加引用】按鈕 則在【TestWebService】項(xiàng)目中加入了Web引用 請(qǐng)注意 就是上面完成的Web Service對(duì)外提供服務(wù)的URL地址 具體可參閱圖 所示:
圖 :在【TestWebService】添加Web Service提供的服務(wù)
從【工具箱】中的【W(wǎng)indows窗體組件】選項(xiàng)卡中往Form 窗體中拖入下列組件 并執(zhí)行相應(yīng)的操作:
一個(gè)DataGrid組件
二個(gè)Button組件 分別是Button 至Button 并在這二個(gè)Button組件拖入Form 的設(shè)計(jì)窗體后 分別雙擊它們 則系統(tǒng)會(huì)在Form vb文件分別產(chǎn)生這二個(gè)組件的Click事件對(duì)應(yīng)的處理代碼
按照表 所示調(diào)整窗體中各組件屬性的數(shù)值
組件類(lèi)型 組件名稱(chēng) 屬性 設(shè)置結(jié)果 Form Form Text 測(cè)試Web Service Form MaximizeBox False Form FormBorderStyle FixedSingle Button Button Text 綁定 Button FlatStyle Flat Button Text 修改 Button FlatStyle Flat
表 :【TestWebService】項(xiàng)目中組件的主要屬性及其對(duì)應(yīng)數(shù)值
在調(diào)整完組件屬性值后 再按照?qǐng)D 所示調(diào)整組件的位置和排列順序:
圖 :【TestWebService】項(xiàng)目中組件排列位置和順序
把Visual Studio Net的當(dāng)前窗口切換到Form vb的代碼編輯窗口 并用下列代碼替換Form vb中的Button 的Click事件對(duì)應(yīng)的處理代碼 下列代碼功能是使用Web Service中提供的 Binding 服務(wù)對(duì)DataGrid組件實(shí)現(xiàn)數(shù)據(jù)綁定:
Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) DataGrid DataSource = MyService Binding ( ) DataGrid DataMember = Cust End Sub
用下列代碼替換Form vb中的Button 的Click事件對(duì)應(yīng)的處理代碼 下列代碼功能是使用Web Service中提供的 Update 服務(wù)實(shí)現(xiàn)通過(guò)DataGrid來(lái)修改數(shù)據(jù)庫(kù)數(shù)據(jù):
Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) Dim ds As DataSet = DataGrid DataSource Dim dsChanges As DataSet = ds GetChanges ( ) If Not ( dsChanges Is Nothing ) Thends Merge ( MyService Update ( dsChanges ) True ) End IfEnd Sub
至此 【TestWebService】項(xiàng)目的全部工作就完成了 調(diào)用Web Service是不是很簡(jiǎn)單 此時(shí)單擊快捷鍵F 運(yùn)行程序后 單擊程序中的【綁定】按鈕就會(huì)對(duì)程序中的DataGrid組件實(shí)現(xiàn)數(shù)據(jù)綁定 單擊程序中的【修改】按鈕 則程序會(huì)根據(jù)DataGrid中的內(nèi)容來(lái)更新數(shù)據(jù)庫(kù) 圖 就是【TestWebService】的運(yùn)行界面:
圖 :【TestWebService】的運(yùn)行界面
Form vb的代碼清單如下:
Public Class Form Inherits System Windows Forms Form#Region Windows 窗體設(shè)計(jì)器生成的代碼 Public Sub New ( ) MyBase New ( ) 該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的 InitializeComponent ( ) 在 InitializeComponent ( ) 調(diào)用之后添加任何初始化End Sub 窗體重寫(xiě)處置以清理組件列表 Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) If disposing ThenIf Not ( ponents Is Nothing ) Then ponents Dispose ( )End If End If MyBase Dispose ( disposing )End Sub Windows 窗體設(shè)計(jì)器所必需的Private ponents As System ComponentModel IContainer 注意 以下過(guò)程是 Windows 窗體設(shè)計(jì)器所必需的 可以使用 Windows 窗體設(shè)計(jì)器修改此過(guò)程 不要使用代碼編輯器修改它 Friend WithEvents Button As System Windows Forms Button Friend WithEvents Button As System Windows Forms Button Friend WithEvents DataGrid As System Windows Forms DataGrid System Diagnostics DebuggerStepThrough ( ) Private Sub InitializeComponent ( ) Me Button = New System Windows Forms Button ( ) Me Button = New System Windows Forms Button ( ) Me DataGrid = New System Windows Forms DataGrid ( ) CType ( Me DataGrid System ComponentModel ISupportInitialize ) BeginInit ( ) Me SuspendLayout ( ) Me Button FlatStyle = System Windows Forms FlatStyle Flat Me Button Location = New System Drawing Point ( ) Me Button Name = Button Me Button Size = New System Drawing Size ( ) Me Button TabIndex = Me Button Text = 綁定 Me Button FlatStyle = System Windows Forms FlatStyle Flat Me Button Location = New System Drawing Point ( ) Me Button Name = Button Me Button Size = New System Drawing Size ( ) Me Button TabIndex = Me Button Text = 修改 Me DataGrid DataMember = Me DataGrid Dock = System Windows Forms DockStyle Top Me DataGrid HeaderForeColor = System Drawing SystemColors ControlText Me DataGrid Name = DataGrid Me DataGrid Size = New System Drawing Size ( ) Me DataGrid TabIndex = Me AutoScaleBaseSize = New System Drawing Size ( ) Me ClientSize = New System Drawing Size ( ) Me Controls AddRange ( New System Windows Forms Control ( ) {Me DataGrid Me Button Me Button } ) Me Name = Form Me Text = 測(cè)試Web Service CType ( Me DataGrid System ComponentModel ISupportInitialize ) EndInit ( ) Me ResumeLayout ( False )End Sub#End RegionPrivate Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) DataGrid DataSource = MyService Binding ( ) DataGrid DataMember = Cust End SubPrivate Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MyService As New localhost Service ( ) Dim ds As DataSet = DataGrid DataSource Dim dsChanges As DataSet = ds GetChanges ( ) If Not ( dsChanges Is Nothing ) Thends Merge ( MyService Update ( dsChanges ) True ) End IfEnd SubEnd Class
六 總結(jié)
lishixinzhi/Article/program/net/201311/11839
網(wǎng)頁(yè)名稱(chēng):vb點(diǎn)虐
編寫(xiě)服務(wù)程序 vb編寫(xiě)web服務(wù)器
轉(zhuǎn)載來(lái)于:http://www.rwnh.cn/article22/ddcpjjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、ChatGPT、微信小程序、商城網(wǎng)站、微信公眾號(hào)、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)