在項目中有時需要将整個業務邏輯類下面的方法封裝成Web服務,由于隻是簡單的封裝,在Web服務的背景代碼中不會寫上任何邏輯,這時我們就需要Web服務提供的方法與類下面提供的方法相同,這是就考慮到使用接口。申明一個接口,然後讓業務邏輯類和Web服務類都實作該接口即可。這裡我們就要用到VS中一個很好的功能:重構!
假設我們現在有一個業務邏輯類HelloLogic用于處理一些業務邏輯,如:

namespace Hello
{
public class HelloLogic
{
public string SayHello()
{
return "Hello";
}
public string SayHello(string name)
return "Hello" + name;
public string SayBye()
return "Bye";
}
}
點選“Refactor”菜單下的“Extract Interface”選項提取該類的接口,将出現如圖視窗
<a href="https://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/VSWeb_A2AE/image_2.png"></a>
選中所有的方法,點選OK即生成接口代碼:

using System;

interface IHelloLogic
string SayBye();
string SayHello();
string SayHello(string name);
由于需要在Web服務項目中使用該接口,這裡需要将interface改成pulic的。然後在web服務項目中添加對該程式集的引用。建立HelloWebService頁面,在背景代碼上申明實作該接口:

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class HelloWebService : System.Web.Services.WebService,Hello.IHelloLogic
将光标放在IHelloLogic上,使用快捷鍵Shift+Alt+F10,将出現如圖提示:
<a href="https://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/VSWeb_A2AE/image_4.png"></a>
第一個是實作該接口,第二個是明确實作該接口,這裡由于隻有這個接口,而且就算有多個接口,隻要接口中的函數不重複就可以直接使用第一個。選擇第一個選項,系統将自動生成代碼:



IHelloLogic Members
接下來隻需要将方法調用寫到具體的函數裡面就可以了。當然不能忘記了使用WebMethod特性。



public class HelloWebService : System.Web.Services.WebService, Hello.IHelloLogic
HelloLogic logic = new HelloLogic();
現在的代碼已經可以編譯通過了,但是有一個問題那就是在一般類方法中可以使用函數名重載,但是Web服務不能使用,我們這裡對SayHello方法的重載需要進行修改。那麼怎麼實作Web服務下的函數重載拉?那就要用到MessageName屬性對方法進行重命名了。使用MessageName 屬性後還沒有完,[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]這裡的标注使得該Web服務不符合 WS-I Basic Profile v1.1,需要将屬性值改為WsiClaims.None。最終完成的代碼應該是:


using System.Collections;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Xml.Linq;

using Hello;
/// <summary>
/// Summary description for HelloWebService
/// </summary>


[WebServiceBinding(ConformsTo = WsiProfiles.None)]

調用的時候我們将看到一個SayHello方法,一個SayHello1方法,這裡的SayHello1方法就是對應的SayHello(string)方法了。


using System.Collections.Generic;


using System.Text;


namespace ConsoleApplication1
class Program
static void Main(string[] args)
HelloService.HelloWebServiceSoapClient h = new ConsoleApplication1.HelloService.HelloWebServiceSoapClient();
Console.WriteLine(h.SayBye());
Console.WriteLine(h.SayHello());
Console.WriteLine(h.SayHello1("test"));
好了,整個Web服務的調用就已經完成了,使用VS自帶的重構功能來提取接口,實作接口有助于提供我們的開放效率,同時也降低了我們在封裝成web服務的時候發生遺漏、拼寫錯誤等失誤。
由于本人對Web服務領域涉足未深,是以可能有錯誤之處,希望大家指正。
本文轉自深藍居部落格園部落格,原文連結:http://www.cnblogs.com/studyzy/archive/2008/03/18/1111253.html,如需轉載請自行聯系原作者