使用C#建立webservice及三種呼叫方式 (轉)

worldblog發表於2007-12-14
使用C#建立webservice及三種呼叫方式 (轉)[@more@]戰略的一個比較重要的部分就是service,利用webservice我們可以建立真正有效的分散式應用。
下面,我們對webservice做一些說明。
假設A是客戶端,B是webservice服務端,透過向傳送p請求,webservice返回客戶端格式的資料。
現在我們看一看建立一個webservice的大致過程:
服務端的webservice是必須要建的。中間的soap,xml我們不用去關心,在客戶端這邊,比較重要的是如何從webservice取得?答案是用的是物件。客戶端由物件(proxy)負責與webservice的通訊。所以在客戶端使用webservice,完全和使用一個本地物件是一樣的。

我們現在以一個簡單的例項來說明。
開啟vs.net,新建工程(.net web服務),在位置中鍵入其中webserver就是工程的名字。確定後,出現一個Service1.asmx.cx,雙擊,出現程式碼視窗,
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace webserver
{
/// 
/// Service1 的摘要說明。
/// 

(1)
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN:該是  Web 服務設計器所必需的
InitializeComponent();
}

#region Component Designer generated code

//Web 服務設計器所必需的
private IContainer components = null;

/// 
/// 設計器支援所需的方法 - 不要使用程式碼編輯器修改
/// 此方法的內容。
/// 

private void InitializeComponent()
{
}

/// 
/// 清理所有正在使用的資源。
/// 

protected overr void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}

#endregion

// WEB 服務示例
// HelloWorld() 示例服務返回字串 Hello World
// 若要生成,請取消註釋下列行,然後儲存並生成專案
// 若要測試此 Web 服務,請按 F5 鍵

// [WebMethod]
// public string HelloWorld()
// {
// return "Hello World";
// }
}
}
下面在(1)處加入
[WebService(Namespace="")]
這是因為soap是基於http協議上的,客戶端無法知道webservice位於那個伺服器上。在實際應用中,比如上放置這個webservice,則Namespace改為/webserver.

下面我們給這個webservice新增一個方法。
// [WebMethod]
// public string HelloWorld()
// {
// return "Hello World";
// }
微軟幫我們寫好了一個,接著新增一個方法。方法名稱叫show.
[WebMethod]
public string show(string yourname)
{
return “”+”歡迎”+yourname;
}
現在,就可以執行了,按F5,點選show,輸入你的名字,然後點選invote
看到了吧。
 
 歡迎yyg 

成功了。開啟bin目錄,Vs.net已經將proxy做好了.webserver.dll.

現在我們在不同的環境下測試:
1. 開啟vs.net,新建”應用程式”工程,命名為Client,增加按鈕,文字框。
現在要用到代理了,右鍵單擊右邊的reference(引用),選擇”新增引用”,選擇瀏覽,找到webserver目錄下的bin目錄下的webserver.dll
再加入一個system.web.webservices的引用,在列表中有。
在form1.cs裡,加入
using System.Web.Services;
using webserver;

然後在
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
後面,插入
private webserver.service1 Client
建立一個service1的例項。雙擊按鈕,程式碼如下:
private void button1_Click( sender, System.EventArgs e)
{
Client =new Service1();
string name;
name=Client.show("龍捲風.NET");
textBox1.Text=name;
}
按F5,執行工程,點選按鈕,文字框中顯示
歡迎龍捲風.NET


2. Asp.NET web視窗的測試
方法與上面的一模一樣,新增引用,建立service1的例項
在此不在細說。
3.在VB中測試
這個就要相對來說複雜一些
首先在vb中建立一個”標準EXE”的工程。新增引用: Soap Type library。注意:如果沒有Microsoft Soap Toolkit,是沒有這個型別庫的。
可以在中。
新增一個text
Private Sub Form_Load()
 Text1.Text = add()
End Sub

Public Function Add() As String
Dim objSoapClient As New SoapClient
 objSoapClient.ClientProperty("ServerHTTPRequest") = True
Call objSoapClient.mssonit("service1.asmx?WSDL", "Service1", "Service1Soap")
這句也可以
objSoapClient.mssoapinit("service1.asmx?WSDL")

 Add = objSoapClient.Show("龍捲風.NET")
End Function

成功需要注意的:
執行服務端webservice的程式,出現下面時
支援下列操作。有關正式定義,請檢視服務說明。
點選服務說明,會得到完整的wsdl
Service1.asmx?WSDL
我們就要使用這個檔案,其中包含了我們定義的方法等等。

Mssoapinit(bstrWSDLFile as string,[bStrServiceName as string ],[bStrport as string ] ,[bstrWSMLDile as string])的用法:
其中第二個,第三個引數在wsdl檔案中可以找到。也可以省略。


後續:還有從COM中生成wsdl檔案等等,我會陸續推出的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993383/,如需轉載,請註明出處,否則將追究法律責任。

相關文章