2008-09-24 32 views
1

創建Web服務以指定要使用的類型時有沒有辦法?具體來說,我希望能夠在客戶端和服務器上使用相同的類型以減少代碼的重複。.NET SOAP常見類型

在簡化的例子:

public class Name 
    { 
     public string FirstName {get; set;} 
     public string Surname { get; set; } 

     public override string ToString() 
     { 
      return string.Concat(FirstName, " ", Surname); 
     } 
    } 

我不希望有功能的重新編碼塊在我的課。另一件事情是任何存在的操作這個類的代碼都不會工作在客戶端,因爲生成的客戶端類是不同的類型。

+0

您的意思是指定Web服務方法的返回類型,還是在客戶端和服務器上使用相同的類? – MusiGenesis 2008-09-24 14:18:00

回答

2

好的,我知道這是SOAP的一個明確的設計決定,所以你實際上不應該這樣做。我發現下面page解釋了爲什麼:

服務共享模式和契約, 不類。服務僅通過 通過 模式和通過 合同的行爲來表達其結構。該服務的合同 描述了消息的結構 和對消息的排序約束。表達式的形式允許傳入消息的機器驗證 。機器 驗證傳入消息 允許您保護服務的完整性 。合同和模式必須隨着時間的推移保持穩定,因此靈活建設 非常重要。

如此說來還有其他兩種可能性:

  1. 生成在Visual Studio或使用Wsdl.exe用的網頁的引用。然後進入生成的Reference.cs(或.vb)文件並顯式刪除類型。然後重定向到您想要位於另一個程序集中的類型。
  2. 您可以通過wsdl.exe和/ sharetypes參數在客戶端的Web服務之間共享類型。
0

如果您希望您的Web服務和客戶端之間共享的類型或結構,公共結構添加到您的Web服務項目,像這樣:

public struct Whatever 
{ 
    public string A; 
    public int B; 
} 

然後添加一個方法到您的Web服務,具有這種結構作爲它的返回類型:

[WebMethod] 
public Whatever GiveMeWhatever() 
{ 
    Whatever what = new Whatever(); 
    what.A = "A"; 
    what.B = 42; 
    return what; 
} 

在更新您的客戶端的Web引用,你就可以創建類型的結構無論您的客戶端應用程序,像這樣:

Webreference.Whatever what = new Webreference.Whatever(); 
what.A = "that works?"; 
what.B = -1; // FILENOTFOUND 

該技術可讓您維護需要在一個位置來回傳遞的任何結構(Web服務項目)的定義。