程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Visual Studio 2008中WCF的新增功能

Visual Studio 2008中WCF的新增功能

編輯:關於.NET

Visual Studio 2008和基礎Microsoft .NET Framework 3.5提供了新工具,並支持Windows Communication Foundation(WCF)。它們並未改變WCF 1.0(與.NET Framework 3.0一起發布)的基本功能,而是對其進行了擴展和完善。

Visual Studio 2008可自動執行WCF手動任務,包括更新代理引用和消除重復任務(例如創建簡單托管項目)。Visual Studio還能解決跨目標和數據協定類型共享等一些困難問題。在本專欄中,我將逐步介紹其新功能及優勢,並對其任何缺陷和解決方法做出解釋。盡管我將在此使用C#項目設置,但除非我另行說明,否則所有設置同樣適用於Visual Basic。

.NET Framework跨目標

Visual Studio的早期版本通常針對隨其一起提供的 .NET Framework 版本。例如,Visual Studio 2005 只能生成針對 .NET Framework 2.0 的程序集,而此慣例並不能反映大多數開發人員所面臨的真實情況。通常,開發人員需要在維護針對早期版本的 .NET 而編寫的舊版應用程序的同時,還要在其新版應用程序中使用新版 Visual Studio。

此外,此慣例還意味著開發人員在維護為早期版本的 .NET Framework 而編寫的應用程序時,無法從效率增強功能(例如 Visual Studio 2005 中引入的代碼重構支持)中獲益。

問題在於 .NET Framework 各版本不支持跨目標功能。您要麼必須安裝多個版本的 Visual Studio,要麼使用獨立的測試和部署內部版本進行補償。Visual Studio 2008嘗試通過為多個版本的.NET Framework提供充分支持(雖然不完美)來解決這一問題。由於實際上.NET Framework 3.0和.NET Framework 3.5使用的CLR版本與.NET Framework 2.0使用的相同,唯一的區別在於新引用的程序集,因此Visual Studio仍可針對相同運行庫,而為.NET Framework版本2.0、3.0和3.5(其中.NET Framework版本號對應的是發行版本,而不是運行庫版本,運行庫版本仍為CLR 2.0)提供跨目標功能。

在Visual Studio 2008中,“Properties”(項目)的“Application”(應用程序)窗格包含一個稱為“Target Framework”(目標框架)的新組合框,通過該組合框您就可以針對.NET Framework版本2.0、3.0和3.5(參見圖1)。

圖1:Visual Studio 2008中的目標框架屬性

Target Framework值僅在開發時有效,而在運行時無效(您的程序集仍指向.NET 2.0 CLR)。您選擇的值表示您構建程序集時可針對的.NET Framework的最早版本。新項目默認被配置為針對.NET Framework 3.5。如果添加引用,則會變得有些復雜;如果在引用較高版本程序集時,降低Target Framework版本,Visual Studio 2008將提示您引用出錯和內部版本失敗。Visual Studio 2008不允許您向其所需Framework版本高於現有項目的.NET Framework程序集添加引用。如果您向版本更高的同一解決方案中的其他項目添加引用,Visual Studio 2008將警告您可能會發生沖突。如果通過浏覽程序集來添加引用,Visual Studio 2008將不會干預您進行操作。

在語言和跨目標方面,請注意,您可以在C#中(而不是Visual Basic中),通過限制編譯器版本來限制使用.NET Framework 2.0或3.0項目中諸如匿名類型和擴展方法等功能。您可以轉至“Build”(內部版本)窗格,然後單擊“Advanced”(高級)按鈕,並選擇“ISO-2(C# 2.0)”作為語言版本(而不是尚未標准化的默認版本)來執行此操作。

在Visual Studio 2008中打開Visual Studio 2005 WCF項目時,升級過程中框架版本保持為 2.0。實際上這可以正常運行(請記住,基礎運行庫版本並未改變),但我建議根據需要手動將其設置為版本 3.0 或 3.5。

使用新項目模板時,Target Framework 版本是最重要的因素。WCF 工作流和整合項目必須針對 .NET Framework 3.5 進行構建;Service Library 項目要求針對 .NET Framework 3.0 或 3.5。“Add Service Reference”(添加服務引用)功能僅當為項目選擇 Framework 版本 3.0 或 3.5 時可用,本專欄稍後將介紹此功能。

WCF 提供的主機

Visual Studio 2008 附帶了一款名為 WcfSvcHost.exe 的現成的通用服務主機。它位於 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE 中。為了方便使用,我建議將該位置添加到系統的 Path 變量中。WcfSvcHost 是一種簡單的命令行實用工具,可接受兩個參數:一個是指向包含一個或多個服務類的 .NET 程序集的文件路徑,另一個是指向托管 .config 文件的文件路徑。例如:

WcfSvcHost.exe /service:MyService.dll /config:App.config

指定的服務程序集可以是類庫程序集 (DLL),也可以是應用程序程序集 (EXE)。WcfSvcHost 將啟動一個新進程,該進程將自動托管指定 .config 文件的服務部分中列出的所有服務類。請注意,這些服務類及其服務約定和數據協定不必是公共類型,可以是內部類型。此外,自動托管的服務不需要提供任何元數據,但是它們可以發布元數據(如果選擇發布)。

WcfSvcHost 是一種以桌面任務欄圖標駐留的 Windows 窗體應用程序。若要關閉主機,只需從任務欄圖標上下文菜單中選擇“Exit”(退出)即可。使用這種方式終止托管不太妥當,因為 WcfSvcHost 將中止當前正在進行的所有調用,客戶端很可能會收到異常。如果單擊 WcfSvcHost 任務欄圖標,將出現一個對話框,其中列出托管的所有服務(參見圖 2)。

圖2:WcfSvcHost 服務列表

該對話框還顯示服務的狀態及其元數據地址,您可以將這些信息復制到剪貼板,稍後向服務添加引用時可能會用得到。關閉 WcfSvcHost UI 只是將其折疊回任務欄。

WcfSvcHost 的目的就是在開發過程中不再需要使用獨立托管程序集來配合服務庫。諸如托管項目等的開發工作是一種重復任務,這些主機通常包含大量相同的代碼行,當有多個服務庫時,這些重復代碼容易導致解決方案變得臃腫。為了便於開發和測試,可以將 WcfSvcHost 直接集成到您的 Visual Studio 2008 服務庫項目中。在項目屬性的“Debug”(調試)窗格中,將 WcfSvcHost.exe 指定為要啟動的外部程序,然後將您的類庫名及其 .config 文件(自動生成並自動復制到 bin 文件夾)指定為參數。

完成後,當您運行類庫(完成上述操作後才能執行運行)時,它將借助該進程附帶的調試器由 WcfSvcHost 自動托管。停止調試時,Visual Studio 2008 將以不妥當的方式中止托管。

您甚至可以在 .NET Framework 3.0 應用程序中與 Visual Studio 2005 項目一起使用 WcfSvcHost,由於 WcfSvcHost 只需要 .NET Framework 3.0,因此只需從安裝了 Visual Studio 2008 的計算機上復制 WcfSvcHost 即可。為了使用更加方便,建議您將 WcfSvcHost 添加到 .NET Framework 3.0 計算機上的全局程序集緩存 (GAC) 中。

WcfSvcHost 的最後一個功能是能夠自動啟動客戶端應用程序,甚至能夠為客戶端提供特定於該應用程序的可選參數:

WcfSvcHost.exe /service:MyService.dll /config:App.config

/client:MyClient.exe  /clientArgs:123,ABC

此功能對於在自動測試、甚至是簡單部署的情況下啟動主機和客戶端非常有用。

WcfSvcHost 的最大缺陷是只適用於簡單情況,例如在打開主機實例之前無需以編程方式訪問主機實例的情況,或在其打開之後以編程方式訪問其事件模型的情況。與使用 IIS 或 Windows Activation Service (WAS) 進行托管不同,WcfSvcHost 沒有對等的服務主機工廠支持。因此,不具備動態添加基址、配置終結點、中止調用以及在主機級別配置自定義行為等功能。通過我對 WCF 的使用體驗發現,除了最簡單的情況之外,所有其他情況中最終都需要以編程方式訪問主機實例,因此我並不將 WcfSvcHost 視為一種成熟、高效的主機,而我自己執行 WAS 或進行專用自托管。

WCF 提供的測試客戶端

除服務主機外,Visual Studio 2008 還隨附了一個用於進行基本測試的簡單通用的測試客戶端,您可以使用它調用大多數服務上的操作。正常安裝後,測試客戶端 WcfTestClient.exe 位於 WcfTestClient.exe, is found after normal installation at C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE 下。您必須為 WcfTestClient 提供一個命令行參數,其中包含要測試的服務的元數據地址:

WcfTestClient.exe http://localhost:9000/

您可以指定任何元數據地址,例如 HTTP-GET 或者 HTTP、TCP 或 IPC(命名管道)上的元數據終結點。也可以指定多個元數據地址:

WcfTestClient.exe http://localhost:8000/ net.tcp://localhost:9000/MEX

WcfTestClient 是一個 Windows Forms 3.5 應用程序(參見圖 3)。在此圖中,左側的樹控件包含測試的服務及其終結點。您可以詳細查看某個終結點的約定並選擇某項操作。特定於該調用的信息將顯示在右側窗格的選項卡中。圖 4 所示為一個簡單約定及其實現的示例。

圖3:使用WcfTestClient

您可以在方法選項卡的“Request”(請求)部分中輸入作為操作參數的一個整數和一個字符串,如圖 3 所示。單擊“Invoke”(調用)按鈕時,它將向服務調度調用,並在“Response”(響應)中顯示返回值或輸出參數。如果是單向操作,WcfTestClient 將在消息框中通知您已成功調度此操作。如果出現異常,WcfTestClient 將在消息框中顯示異常信息,並讓您發出其他調用。

Figure 4:示例服務

[ServiceContract]
interface IMyContract
{
[OperationContract]
string MyMethod(int someNumber,string someText);
}
class MyService : IMyContract
{
public string MyMethod(int someNumber,string someText)
{
return "Hello";
}
}

WcfTestClient 不使用測試服務來維護傳輸層會話(或任何其他會話)。所有調用均在新代理實例上進行。此外,所有調用均異步進行,這樣 UI 能隨時進行響應。但是,盡管是異步調用,WcfTestClient 只允許一次調度一個調用。

WcfTestClient 從代理文件(包括 .config 文件)以靜默方式創建程序集,然後從臨時位置加載該程序集。如果單擊樹中的“Config File”(配置文件)項,您可以獲取該 .config 文件(添加服務引用時生成的同一 .config 文件),並可以將其顯示其選項卡中。

與早期的 Visual Studio ASMX Web 服務測試頁不同,通過 WcfTestClient 您可以借助枚舉、類或結構(每個類或結構都是其他類或結構的組成部分)等復合參數、甚至是參數集合和參數數組來調用操作。只需展開“Request”(請求)部分中的項,從下拉列表中設置其值(例如枚舉值),並進行調用即可。如果操作接受集合或數組,您還需要設置其長度。例如,圖 5 顯示了以下操作的結果請求和響應:

圖5:指定數組長度和值

[OperationContract]
bool ProcessNumbers(int[] numbers]

類似地,“Response”(響應)窗格將包含所有返回的復合值或輸出參數。這樣我們發現了 WcfTestClient 的一個缺陷:為了指定要測試的不同服務,您必須先關閉,並在更改命令行參數後重新啟動 WcfTestClient。如果能同時在 GUI 中提供服務地址,則可能會很好地緩解這個問題。

您可以直接將 WcfTestClient 集成到您的 Visual Studio 2008 解決方案中。首先,將類庫項目添加到解決方案,並刪除所有引用、文件夾和源文件(因為您不需要這些項)。然後,將 WcfTestClient.exe 設置為外部啟動程序,並提供一個或多個測試服務的一個或多個元數據地址,例如 IIS 或 WAS 托管項目的 .svc 地址,或者就此而言,解決方案內部或外部主機項目的任何其他元數據地址。

請注意,如果計算機上只安裝了 .NET Framework 3.0,則您不能在其上使用 WcfTestClient,因為 WcfTestClient 需要使用內部 .NET Framework 3.5 樹網格控件(用於表示復合參數的控件)。

當然,您可以在一個步驟中結合 WcfTestClient 和 WcfSvcHost,這樣即可自動托管服務庫中的服務並對其進行測試:

WcfSvcHost.exe /service:MyService.dll  /config:App.config

/client:WcfTestClient.exe

/clientArgs:http://localhost:9000/

但是,可以使用 WcfSvcHost 指定元數據參數。默認情況下,WcfSvcHost 將向指定客戶端應用程序傳送它在服務 .config 文件中找到的元數據地址。僅當服務未提供自己的元數據或您希望測試客戶端使用其他地址時,才應顯式指定元數據地址。此外,如果服務 .config 文件包含給定服務的多個元數據終結點,則這些終結點將按以下優先順序提供:HTTP、TCP、IPC 和 HTTP-GET。您可以在 Visual Studio 2008 中合並這些步驟以進行無縫托管和測試體驗。將 WcfSvcHost.exe 指定為啟動程序,並將 .config 文件和 WcfTestClient.exe 指定為客戶端。

WCF 服務庫

作為 Target Framework 的一項功能,Visual Studio 2008 提供了多個新的 WCF 項目模板。通過“New Project”(新建項目)對話框中的組合框,您可以指定 Target Framework 的版本(2.0、3.0 或 3.5),如圖 6 所示。

圖6:WCF 項目模板

如果選擇 Framework 2.0,則沒有任何新模板可用。Framework 3.0 中提供了一個稱為 WCF 服務庫的新項目模板。此項目類型只是 WcfSvcHost 和 WcfTestClient 的預構建用法,與我前面提到的技術(將兩者合二為一)非常類似。請注意,使用 WCF 服務庫模板,就不需要將 WcfSvcHost.exe 指定為啟動程序或 .config 文件,因為項目文件包含適用於 WCF 服務庫的新 ProjectTypeGuids 元素。

但是該模板有一個負面影響:停止調試程序不會終止測試客戶端;時間久了,您的桌面會由於孤立客戶端而變得雜亂。要解決此問題,只需還原到前面清晰介紹的手動步驟。

WCF 服務庫還提供了一個用於服務約定、服務約定的實施及匹配的 .config 文件的簡單模板。

利用聚合服務庫,您可以通過 WCF 終結點實現 RSS 源,並且可以從返回源的簡單服務約定、服務約定的實施及匹配的 .config 文件著手操作。您可以托管和顯示自己的源,與托管和顯示任何其他服務一樣。聚合終結點使用新的 WebHttpBinding 綁定。此新綁定旨在用於接收 Web 請求,而不能用於常規服務調用。

使用“順序工作流服務庫”模板,您可以將終結點的約定操作作為工作流活動來實現,或者將工作流顯示為服務。項目將包含一個用於實現簡單約定和匹配的 .config 文件的順序活動。盡管客戶端也將與類似傳統終結點的終結點進行交互,但其實現完全是工作流驅動的。

“狀態機工作流服務庫”模板使用狀態機而不是順序工作流來實施其操作(觸發狀態轉換)。工作流項目模板使用 WcfSvcHost 和 WcfTestClient,如同普通 WCF 服務庫那樣。工作流模板還使用新的上下文綁定對工作流實例 ID 的傳遞進行管理,從而支持持續工作流。我將在以後的專欄中詳細介紹這些綁定。

添加服務引用

Visual Studio 2005 extensions for .NET Framework 3.0 提供了一項用於向 WCF 服務添加引用的基本功能,而不具有 SvcUtil 的許多高級功能。Visual Studio 2008 具有一個新的服務引用對話框,如圖 7 所示。

圖7:“添加服務引用”對話框

您可以在任何項目中打開此新對話框,方法是:右鍵單擊解決方案資源管理器中項目內的任意位置,然後從上下文菜單中選擇“Add Service Reference”(添加服務引用)。請注意,必須將項目配置為針對 .NET Framework 3.0(及更高版本)才能啟用此選項。

在“Add Service Reference”(添加服務引用)對話框中,首先需要指定服務元數據地址(不是服務 URL,如對話框中所述),然後單擊“Go”(執行)查看可用服務終結點(不是服務,如標記所示)。必須指定命名空間(如 MyService)才能包含生成的代理,然後單擊“OK”(確定)生成代理並更新 .config 文件。請注意,在多數情況下,Visual Studio 2008 不是足夠的智能來推斷最清楚的綁定值,因此,它將通過聲明綁定的所有默認值來刪除 .config 文件。Visual Studio 的未來版本中將會解決此問題。如果您關注對 .config 文件的維護,請先打開 .config 文件,再添加引用,然後執行一次撤消 (Ctrl+Z) 操作,最後手動將 .config 文件條目添加到客戶端部分中。

只要 WCF 服務位於網站項目或某個新 WCF 服務庫中,您就可以使用“Discover”(搜索)按鈕在自己的解決方案中查找這些服務。如果位於網站項目中,Visual Studio 2008 將檢索 IIS 中的元數據或啟動基於文件系統的 ASP.NET 開發服務器。如果位於 WCF 服務庫中,則 WCF 將自動啟動其主機 (WcfSvcHost) 以便獲取元數據。

可以通過“Advanced”(高級)按鈕打開設置對話框,從而調整代理生成,如同使用 SvcUtil(參見圖 8)一樣。通過使用更直觀的選項,您可以配置生成的代理和約定(公共或內部)的可見性;可以為數據類型生成適用於高級互操作方案的消息約定,在此方案中必須遵從現有消息格式(通常為自定義),並可以單擊“Add Web Reference”(添加 Web 引用)按鈕將引用轉換為舊 ASMX Web 服務引用。

圖8:服務引用高級選項

“Generate asynchronous operations”(生成異步操作)復選框可以為導入的約定中的每個操作添加一對匹配的 Begin<operation> 和 End<operation> 元素,這兩個元素允許客戶端在工作線程中異步發出調用,並且通過提供完成回調方法或阻止完成來允許客戶端稍後與操作完成進行同步。例如,假設約定的定義如下:

[ServiceContract]
interface ICalculator
{
[OperationContract]
int Add(int number1,int number2);
}

則導入的約定將如圖 9 所示。

Figure 9:導入的異步約定

[ServiceContract]
interface ICalculator
{
[OperationContract]
int Add(int number1,int number2);
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginAdd(int number1,int number2,
AsyncCallback callback,object asyncState);
int EndAdd(IAsyncResult result);
//Rest of the methods
}

異步調用的匹配客戶端代碼將類似於如下所示:

CalculatorClient proxy = new CalculatorClient();
int sum;
AsyncCallback completion = (result)=>
{
sum = proxy.EndAdd(result);
Debug.Assert(sum == 5);
proxy.Close();
};
proxy.BeginAdd(2,3,completion,null);

雖然您可以按原樣使用這些方法,但是提供給 Begin<operation> 的完成回調是從線程池中的線程調用的。如果使用回調訪問某些與特定線程相關聯的資源,則這樣做會出現嚴重問題。Windows 窗體(或 WPF)應用程序即為典型示例,此應用程序異步調度較長的服務調用(避免阻止 UI),然後希望使用調用結果來更新 UI。不允許使用原始 Begin<operation> 進行更新,因為只允許 UI 線程更新 UI。為了更好地處理此情況,已用受保護的 InvokeAsync 方法擴展了 ClientBase<T> 基類,該方法可以獲取客戶端的同步上下文並將其用於調用完成回調,如圖 10 所示。

Figure 10:ClientBase 中的異步回調管理

public abstract class ClientBase<T> : ...
{
protected delegate IAsyncResult BeginOperationDelegate(
object[] inValues,AsyncCallback asyncCallback,object state);
protected delegate object[] EndOperationDelegate(IAsyncResult result);
//Picks up sync context used for completion callback
protected void InvokeAsync(BeginOperationDelegate beginOpDelegate,
object[] inValues,
EndOperationDelegate endOpDelegate,
SendOrPostCallback opCompletedCallback,
object userState)
{}
//More members
}

ClientBase<T> 還提供了一個事件參數幫助器類和兩個用於啟動和結束異步調用的專用委托。生成的代理類由 ClientBase<T> 派生而來,此代理類將使用這些基本功能。代理將具有一個 <operation>Completed 公共事件(該事件使用特定於異步方法結果的強類型事件參數類)和兩個 <operation>Async 方法(用於異步調度調用):

partial class AddCompletedEventArgs : AsyncCompletedEventArgs
{
public int Result
{get;}
}
class CalculatorClient : ClientBase<ICalculator>,ICalculator
{
public event EventHandler<AddCompletedEventArgs> AddCompleted;
public void AddAsync(int number1,int number2,object userState);
public void AddAsync(int number1,int number2);
//Rest of the proxy
}

客戶端還可以為 <operation>Completed 事件訂閱事件處理程序,以便在完成時調用此事件處理程序。使用 <operation>Async 與 Begin<operation> 的主要差別在於:<operation>Async 方法獲取客戶端的同步上下文,並在該同步上下文中激發 <operation>Completed 事件,如圖 11 所示。

Figure 11:針對用戶界面友好的異步調用的調用

partial class CalculatorForm : Form
{
CalculatorClient m_Proxy;
public MyClient()
{
InitializeComponent();
m_Proxy = new CalculatorClient();
m_Proxy.AddCompleted += OnAddCompleted;
}
void CallAsync(object sender,EventArgs args)
{
m_Proxy.AddAsync(2,3); //Sync context picked up here
}
//Called on the UI thread
void OnAddCompleted(object sender,AddCompletedEventArgs args)
{  
Text = "Sum = " + args.Result;
}
}

通過“Collection”(集合)類型組合框,您可以指定如何向客戶端顯示在服務元數據中找到的某些類型的集合和數組。例如,如果服務操作返回 IEnumerable<T>、IList<T> 或 ICollection<T> 集合中的某一個,則默認情況下代理會將其顯示為數組。例如,以下服務端操作:

[OperationContract]
IEnumerable<int> GetNumbers();

將在代理上表示為:

[OperationContract]
int[] GetNumbers();

但是,您可以請求 Visual Studio 2008 使用其他集合(例如用於進行數據綁定的 BindingList、List<T>、Collection 和 LinkedList<T> 等)。如果可以進行轉換,代理將使用請求的集合類型而不是數組,如下所示:

[OperationContract]
List<int> GetNumbers();

字典也具有類似功能。通常情況下,如果服務操作返回可序列化的字典,如下所示:

[Serializable]
class MyDictionary<K,T> : IDictionary<K,T>
{...}
[OperationContract]
MyDictionary<int,string> GetDictionary();

代理類隨後會將該字典表示為 Dictionary<T,K>,這是以下 Dictionary 集合類型組合框的默認值:

[OperationContract]
Dictionary<int,string> GetDictionary();

但是,您可以請求其他字典類型(如 SortedDictionary<T,K>、HashTable 或 ListDictionary),代理將改為使用這些字典(如果可能):

[OperationContract]
SortedDictionary<int,string> GetDictionary();

綜上所述,新服務引用最重要的功能就是能夠在程序集之間共享數據協定類型。使用 Visual Studio 2005,如果客戶端將服務引用添加到兩個支持相同數據協定的獨立服務中,那麼客戶端將獲得兩個類型完全相同(表示相同數據協定)的不同服務引用。使用 Visual Studio 2008,默認情況下,如果客戶端引用的任何程序集所具有的數據協定類型與引用服務的元數據中顯示的數據協定類型相匹配,則 Visual Studio 2008 將不會再次導入該類型。有必要再次強調一下,現有數據協定引用必須位於另一個引用程序集中,而不是位於客戶端項目本身中。Visual Studio 的未來版本中可能會解決此限制。目前,解決方法和最佳實踐都很明顯:將所有共享數據協定都構建到指定的類庫中,並讓所有客戶端都引用該程序集。

通過服務引用的高級設置對話框,您可以配置數據協定共享。默認情況下“Reuse types in the referenced assemblies”(重用引用程序集中的類型)復選框處於選中狀態,但您可以關閉此功能。不管復選框的名稱是什麼,此復選框都將只能共享數據協定而不能共享服務約定。使用復選框下面的單選按鈕(參見圖 8),還可以指示 Visual Studio 2008 在所有引用的程序集中重用數據協定,或者通過選中列表中的特定程序集來限制共享這些程序集。

添加引用後,項目將具有一個新文件夾 Service References,該文件夾中顯示了每個引用的服務的服務引用項(參見圖 12)。

圖12:服務引用文件夾

隨時可以右鍵單擊引用並選擇“Update Service Reference”(更新服務引用)來重新生成代理並更新客戶端的 .config 文件。由於服務引用項中還包含一個記錄了所使用的原始元數據地址的文件,因此可以執行此操作。

還可以選擇“Configure Service Reference”(配置服務引用)打開一個對話框,該對話框與添加引用時使用的高級設置對話框類似。通過配置服務引用對話框,您可以更改服務元數據地址以及其他高級代理設置。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved