1.配置SQLServer外圍應(yīng)用服務(wù)器,開啟SQL2005遠程連接功能:
成都創(chuàng)新互聯(lián)長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為興慶企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,興慶網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
操作方式如下,點擊“配置工具”-“SQLServer外圍應(yīng)用配置器”,然后在打開的窗口中選擇“服務(wù)和連接的外圍應(yīng)用配置器”-然后選擇Database Engine節(jié)點下的 “遠程連接”,選擇“本地連接和遠程連接”,同時選擇“同時使用TCP/IP和named pipes”,確定后然后需要重新啟動數(shù)據(jù)庫服務(wù)就可以了。
2.把登陸設(shè)置改為SQLServer 和 Windows 身份驗證模式,具體設(shè)置如下:
打開SQLServer Management Studio管理器,點擊服務(wù)器上面右鍵然后查看屬性,在安全性選項里面對服務(wù)身份驗證選擇“SQLServer 和 Windows 身份驗證模式”。
所謂的委托(Delegate)實際上就是和C/C++里面的函數(shù)指針差不多,只是增強了類型檢查等其它健壯性方面的內(nèi)容。異步調(diào)用的回調(diào)函數(shù)有格式要求,所謂格式要求就是參數(shù)數(shù)量及類型順序的要求,具體是什么樣的你要看文檔了。一般.NET Framework里面都是AsyncCallBack。
所謂異步編程,就是說你要求做某樣事情,但是在完成這件事之前,我能接著做下一件事,而當(dāng)這件事情完成之后,能夠有一種機制通知我完成了。相反,在完成之前一直等待,直到完成了才能進行下一步操作,叫做同步。一般來說,我們平常寫的程序都是“同步”,或者成為“順序執(zhí)行”更加貼切,而“異步”則可以說是“亂序執(zhí)行”的。
可以看到,同步的代碼非常好寫,因為我們可以預(yù)測執(zhí)行的順序和情況。而異步就不是很好寫了,因為無法得知完成的時候我正在做什么、做到什么程度。過去寫這些代碼是比較麻煩的,實現(xiàn)的辦法就是自己建立一個處理異步事物的線程,然后在這個線程和主線程之間建立聯(lián)系。而現(xiàn)在這個過程大部分已經(jīng)被系統(tǒng)封裝起來了,你只要調(diào)用BeginXXX,系統(tǒng)就會為你自動建立一個新的線程處理這個事情,當(dāng)前線程不阻塞,可以馬上進行下一項操作,于是就實現(xiàn)了“異步”了。但是從前面我講道的你就應(yīng)該知道,開始異步操作并沒有完事,還需要能夠得知操作完成,并能夠進行相應(yīng)的處理。于是你在調(diào)用BeginXXX的時候就需要傳遞一個回調(diào)函數(shù),在.NET里是以委托的方式傳遞的?;卣{(diào)函數(shù)的意思就是“回過頭來調(diào)用你”,或者說A調(diào)用B并且傳遞函數(shù)C的地址,于是B在指定的情況下調(diào)用A指定的函數(shù)C?,F(xiàn)在就應(yīng)該明白這個回調(diào)函數(shù)在BeginXXX中的作用就是,當(dāng)你指定的事情做完之后將會調(diào)用這個回調(diào)函數(shù)。
在這個回調(diào)函數(shù)里面,我們就可以進行一些后續(xù)的工作,例如接著進行性質(zhì)相同的工作,或者相應(yīng)的處理。在這里,我們也許向知道剛才那件事情執(zhí)行的情況和結(jié)果,這個時候我們就可以通過EndXXX來獲得這些東西。說到這里,結(jié)合上面說到的AsyncCallBack以及隨便哪個BeginXXX,我們可能會對下列兩個東西感到困惑:
IAsyncResult
stateObject
首先說IAsyncResult,這個是一個接口,你在回調(diào)函數(shù)中通過參數(shù)獲得的對象具體是什么類型的一般我們不需要關(guān)心,我們只需要依照這個接口的定義進行訪問就可以了。簡單點說,這個接口規(guī)定了順利完成異步操作所需信息的最小集合。一般來說,我們需要通過這個參數(shù)(ar)來識別異步操作。比如說,你在一瞬間發(fā)起一百個“從不同的網(wǎng)絡(luò)連接獲取數(shù)據(jù)”的異步請求,當(dāng)某一個請求被完成的時候,如何判斷是那個請求被完成呢?就是依靠回調(diào)函數(shù)的參數(shù)ar。實際上你一般是不需要參與判斷的,你只要將這個ar傳遞給EndXXX就可以了,EndXXX會根據(jù)這個ar自行判斷的。需要注意的是,這個ar就是你調(diào)用BeginXXX的時候的返回值,可以說是一個存根,如果你需要在完成操作前終止他,也可以通過將這個存根傳遞給EndXXX,EndXXX就會根據(jù)情況終止操作。(IAsyncResult里面的IsCompleted提供了是否已經(jīng)完成的判斷,EndXXX就是根據(jù)這個值決定是否有必要終止。當(dāng)然,你不需要關(guān)心他。)
接下來我們看看stateObject,這個東西被稱為狀態(tài)對象。于是大家就可能奇怪了:那個ar不也是狀態(tài)嗎?實際上stateObject是一個留給用戶使用的東西,BeginXXX/EndXXX根本就不使用。這個stateObject會被裝到ar的AsyncState里面,也就是說這個stateObject可以隨時通過訪問存根(BeginXXX的返回值)或者回調(diào)函數(shù)里的ar得到,你完全沒必要額外的保存到什么地方,更不需要費神的去考慮如何和你的某個異步操作對應(yīng)起來。說了半天,這個東西有什么用呢?你想怎么用就怎么用唄,發(fā)揮一下你的想象力。比如說,你可以保存這是第幾次操作,或者在多個異步操作之間要同步的時候可以作為信號旗,再或者直接是操作這個異步操作的對象(x.BeginXXX的時候?qū)傳遞到stateObject參數(shù)上)。
第一種用法有點多余,第二種用法有點復(fù)雜,第三種我用得最多。因為你很可能在協(xié)一個服務(wù)端,而服務(wù)段必須能夠響應(yīng)多個客戶端,這決定了必須用異步。同時,對于多個客戶端必然有多個對象,例如網(wǎng)絡(luò)連接的時候可能是Socket。而實際上處理的方法或者協(xié)議是和具體哪個客戶端沒有關(guān)聯(lián)的,因此我們只需要一套處理程序就夠了。這個時候第三種用法就很有用處,我們完全可以把代碼寫成這樣:
Sub DataReceived(ByVal ar As IAsyncResult)
ar.AsyncState.EndReceive(ar)
ar.AsyncState.BeginReceive(... , ar.AsyncState)
End Sub
這樣就不需要額外的數(shù)據(jù)結(jié)構(gòu)去記錄有那些正在活動的對象了。
MSDN上的,看看對你有沒有幫助。GOOD LUCK!
Imports System.Net
Imports System.IO
Module FtpSample
Sub Main(ByVal args() As String)
If args.Length = 0 OrElse args(0).Equals("/?") Then
DisplayUsage()
ElseIf args.Length = 1 Then
Download(args(0))
ElseIf args.Length = 2 Then
If args(0).Equals("/list") Then
List(args(1))
Else
Upload(args(0), args(1))
End If
Else
Console.WriteLine("Unrecognized argument.")
End If
End Sub
Private Sub DisplayUsage()
Console.WriteLine("USAGE:")
Console.WriteLine(" FtpSample [/? | FTP download URL | local file")
Console.WriteLine(" FTP upload URL | /list FTP list URL]")
Console.WriteLine()
Console.WriteLine("where")
Console.WriteLine(" FTP download URL URL of a file to download from an FTP server.")
Console.WriteLine(" FTP upload URL Location on a FTP server to upload a file to.")
Console.WriteLine(" FTP list URL Location on a FTP server to list the contents of.")
Console.WriteLine(" local file A local file to upload to an FTP server.")
Console.WriteLine()
Console.WriteLine(" Options:")
Console.WriteLine(" /? Display this help message.")
Console.WriteLine(" /list Specifies the list command.")
Console.WriteLine()
Console.WriteLine("EXAMPLES:")
Console.WriteLine(" Download a file FtpSample ")
Console.WriteLine(" Upload a file FtpSample upload.txt ")
End Sub
Private Sub Download(ByVal downloadUrl As String)
Dim responseStream As Stream = Nothing
Dim fileStream As FileStream = Nothing
Dim reader As StreamReader = Nothing
Try
Dim downloadRequest As FtpWebRequest = _
WebRequest.Create(downloadUrl)
Dim downloadResponse As FtpWebResponse = _
downloadRequest.GetResponse()
responseStream = downloadResponse.GetResponseStream()
Dim fileName As String = _
Path.GetFileName(downloadRequest.RequestUri.AbsolutePath)
If fileName.Length = 0 Then
reader = New StreamReader(responseStream)
Console.WriteLine(reader.ReadToEnd())
Else
fileStream = File.Create(fileName)
Dim buffer(1024) As Byte
Dim bytesRead As Integer
While True
bytesRead = responseStream.Read(buffer, 0, buffer.Length)
If bytesRead = 0 Then
Exit While
End If
fileStream.Write(buffer, 0, bytesRead)
End While
End If
Console.WriteLine("Download complete.")
Catch ex As UriFormatException
Console.WriteLine(ex.Message)
Catch ex As WebException
Console.WriteLine(ex.Message)
Catch ex As IOException
Console.WriteLine(ex.Message)
Finally
If reader IsNot Nothing Then
reader.Close()
ElseIf responseStream IsNot Nothing Then
responseStream.Close()
End If
If fileStream IsNot Nothing Then
fileStream.Close()
End If
End Try
End Sub
Private Sub Upload(ByVal fileName As String, ByVal uploadUrl As String)
Dim requestStream As Stream = Nothing
Dim fileStream As FileStream = Nothing
Dim uploadResponse As FtpWebResponse = Nothing
Try
Dim uploadRequest As FtpWebRequest = WebRequest.Create(uploadUrl)
uploadRequest.Method = WebRequestMethods.
' UploadFile is not supported through an Http proxy
' so we disable the proxy for this request.
uploadRequest.Proxy = Nothing
requestStream = uploadRequest.GetRequestStream()
fileStream = File.Open(fileName, FileMode.Open)
Dim buffer(1024) As Byte
Dim bytesRead As Integer
While True
bytesRead = fileStream.Read(buffer, 0, buffer.Length)
If bytesRead = 0 Then
Exit While
End If
requestStream.Write(buffer, 0, bytesRead)
End While
' The request stream must be closed before getting the response.
requestStream.Close()
uploadResponse = uploadRequest.GetResponse()
Console.WriteLine("Upload complete.")
Catch ex As UriFormatException
Console.WriteLine(ex.Message)
Catch ex As IOException
Console.WriteLine(ex.Message)
Catch ex As WebException
Console.WriteLine(ex.Message)
Finally
If uploadResponse IsNot Nothing Then
uploadResponse.Close()
End If
If fileStream IsNot Nothing Then
fileStream.Close()
End If
If requestStream IsNot Nothing Then
requestStream.Close()
End If
End Try
End Sub
Private Sub List(ByVal listUrl As String)
Dim reader As StreamReader = Nothing
Try
Dim listRequest As FtpWebRequest = WebRequest.Create(listUrl)
listRequest.Method = WebRequestMethods.
Dim listResponse As FtpWebResponse = listRequest.GetResponse()
reader = New StreamReader(listResponse.GetResponseStream())
Console.WriteLine(reader.ReadToEnd())
Console.WriteLine("List complete.")
Catch ex As UriFormatException
Console.WriteLine(ex.Message)
Catch ex As WebException
Console.WriteLine(ex.Message)
Finally
If reader IsNot Nothing Then
reader.Close()
End If
End Try
End Sub
End Module
可以通過設(shè)置 Credentials 屬性來指定用于連接服務(wù)器的憑據(jù),也可以將它們包含在傳遞給 Create 方法的 URI 的 UserInfo 部分中。
從 FTP 服務(wù)器下載文件時,如果命令成功,所請求的文件的內(nèi)容即在響應(yīng)對象的流中。通過調(diào)用 GetResponseStream 方法,可以訪問此流。
如果使用 FtpWebRequest 對象向服務(wù)器上載文件,則必須將文件內(nèi)容寫入請求流,請求流是通過調(diào)用 GetRequestStream 方法或其異步對應(yīng)方法(BeginGetRequestStream 和 EndGetRequestStream 方法)獲取的。必須寫入流并在發(fā)送請求之前關(guān)閉該流。
請求是通過調(diào)用 GetResponse 方法或其異步對應(yīng)方法(BeginGetResponse 和 EndGetResponse 方法)發(fā)送到服務(wù)器的。請求的操作完成時,會返回一個 FtpWebResponse 對象。FtpWebResponse 對象提供操作的狀態(tài)以及從服務(wù)器下載的所有數(shù)據(jù)。
run需要一個action方法。
這個方法用于用后臺進程執(zhí)行占用大量CPU的工作,你的for代碼段應(yīng)該寫在里面。
我沒用過這個,粗略看了一下資料,實際情況與他的實例不太一樣,Dim a As Task(of Boolean)=Await Doo(),直接提示錯誤,正確用法是去掉await。
解決以上兩個問題,測試運行通過。(一個文本框滾數(shù)字,另一個打字無壓力)
其實你的要求,不需要這么高級。多線程應(yīng)該可以。
1、你待將服務(wù)器端的服務(wù)Function Getstr(ByVal str As String) As String開啟;
2、客戶端Silverlight要調(diào)用服務(wù),必須解決跨域問題;
3、客戶端silverlight調(diào)用服務(wù)必須是異步調(diào)用,因為silverlight不支持同步調(diào)用
先把這個“動作”定義為方法
Public Function MyAction(a As Integer) As Integer
' do something...
Return a+1
End Function
在類外面定義一個委托: Public Delegate Function
MyActionHandler(a As Integer) As Integer
在需要調(diào)用的地方:
Dim mah As MyActionHandler =
AddressOf MyAction
Dim iar As IAsyncResult = mah.BeginInvoke(1,Nothing,Nothing)
要結(jié)束并獲得返回值:
Dim result As Integer = mah.EndInvoke(iar)