COM+ 整合:Web 裝載
這個範例示範如何從 COM+ 應用程式將介面公開為 Windows Communication Foundation (WCF) 服務,以及如何從 WCF 用戶端呼叫此服務。這個範例是由用戶端主控台程式 (.exe) 以及已在 COM+ 中註冊的 Enterprise Services 程式庫應用程式 (.dll) 所組成。
注意: |
---|
此範例的安裝程序與建置指示位於本主題的結尾。 |
注意: |
---|
這個範例的 Visual Basic 版本必須設定為伺服器應用程式,而且必須是跨處理序 (Out Of-Process) 裝載,才能在 64 位元版本的 Windows 作業系統上執行。如需如何將範例設定為伺服器應用程式的詳細資訊,請參閱設定 COM+ 應用程式 (本頁面可能為英文)。 |
Enterprise Services 應用程式包含單一元件,此元件會實作公開數學方法 (Add、Subtract、Multiply 和 Divide) 的單一 ICalculator
介面。
// Define the component's interface.
public interface ICalculator
{
double Add(double n1, double n2);
double Subtract(double n1, double n2);
double Multiply(double n1, double n2);
double Divide(double n1, double n2);
}
這個介面會公開做為定義要求-回覆通訊模式的服務合約。用戶端會對數學作業提出同步要求,而服務和基礎元件則以結果回覆。您可以在主控台視窗中看到用戶端活動。
服務由網際網路資訊服務 (IIS) 以同處理序 (In-Process) 方式裝載,並且會由傳送至服務的第一則訊息啟動。ESCalculatorService
類別實作會計算並傳回適當的結果。
// Supporting implementation for the ICalculator interface.
public class ESCalculatorService : ServicedComponent, ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
public double Subtract(double n1, double n2)
{
return n1 - n2;
}
public double Multiply(double n1, double n2)
{
return n1 * n2;
}
public double Divide(double n1, double n2)
{
return n1 / n2;
}
}
注意: |
---|
此類別不包含任何 ServiceModel 特定的程式碼,而只是可透過 Enterprise Services 屬性賦予屬性的一般 Enterprise Services 組件,此組件會經過簽署並新增至全域組件快取 (GAC)。 |
COM+ Service Model Configuration Tool (ComSvcConfig.exe) 會用來為選取的介面新增支援服務。您可以使用下列語法執行這項工作。
ComSvcConfig.exe /install /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator hosting:was /webDirectory:ServiceModelSamples /mex /verbose
在本例中,工具會為 ServiceModelSample.ESCalculator 元件的 ICalculator
介面新增服務,而此元件位於 ServiceModelSample 應用程式中。IIS 會在 ServiceModelSample 虛擬目錄中裝載服務。新增的服務會公開用來與服務進行通訊的單一端點。根據預設,用於與服務通訊的端點位址是建構自元件的 ProgID (即 https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc),但是您可以變更 .svc 服務檔案名稱,修改這個服務端點位址。工具會將服務繫結的組態新增至 Web.config 檔案。服務繫結的組態預設為標準 wsHttpBinding 繫結,此項繫結會提供使用 SOAP 1.2 的 HTTP 通訊以及規範定址與安全性的 Web 服務標準。
此工具還會在 https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex 上公開中繼資料交換 (MEX) 端點,並在 https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc?wsdl 公開可從瀏覽器透過 HTTP GET 存取 WSDL 中繼資料的功能。您可以省略 /mex 工具選項來停用這些中繼資料功能。
服務合約直接衍生自 ICalculator
介面,而且相當於下列 ServiceContract 定義。
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
用戶端會使用Service Metadata Utility Tool (Svcutil.exe) 產生的用戶端,對合約進行通訊。用戶端會包含在 generatedClient.cs 檔案中。這個公用程式會擷取服務的中繼資料,然後產生用來對某個合約類型進行通訊的用戶端。裝載的服務必須可用來產生 Proxy 程式碼,因為要用它來擷取更新的中繼資料。您可以從用戶端目錄中的命令提示字元執行下列命令,以產生具型別的 Proxy:
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc/mex /out:generatedClient.cs
如果在指定的合約上提供產生的用戶端以進行通訊,這個用戶端便可以設定適當的位址和繫結來存取指定的服務端點。和服務一樣,用戶端也會使用組態檔 (App.config) 來指定要通訊的端點。用戶端的端點組態是由組態名稱、服務端點的絕對位址、繫結和合約所組成。
<system.serviceModel>
<client>
<endpoint
address="https://localhost/ServiceModelSamples/servicemodelsample.escalculator.svc/ICalculator"
binding="wsHttpBinding"
bindingConfiguration="comNonTransactionalBinding"
contract="ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<binding name="comNonTransactionalBinding" >
<reliableSession enabled="true"/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
用戶端實作會建構所產生之用戶端的執行個體。然後,這個執行個體就可以開始與服務通訊。
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
當您執行範例時,作業要求和回應會顯示在用戶端主控台視窗中。這可以說明如何在 WCF 用戶端中使用產生的 WCF 服務。在用戶端視窗中按下 ENTER 鍵,即可關閉用戶端。
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
若要設定和建置範例
若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。
確定 \InetPub\wwwroot\ServiceModelSamples 及其 bin 子目錄都是空的。
從命令提示字元巡覽至範例的 service\bin 資料夾。如果使用 Windows Vista 或 Windows Server 2008,請務必使用系統管理員身分執行命令提示字元。
輸入 gacutil.exe /i ESCalculator.dll,將組件新增至全域組件快取。請確定 Gacutil.exe 位於路徑中。
輸入 regsvcs.exe ESCalculator.dll,向 COM+ 註冊組件的元件和 ServiceModelSample 應用程式。請確定 Regsvcs.exe 位於路徑中。
輸入 ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose,將介面公開為裝載於 IIS 的服務。
請確定 ComSvcConfig.exe 位於路徑中。
若要在同一部機器上執行範例
輸入下列位址,確定您可以使用瀏覽器存取服務:https://localhost/ServiceModelSamples/ServiceModelSample.ESCalculator.svc。確認頁面應該會顯示在回應中。
從語言特定資料夾下的 \client\bin\ 執行 Client.exe。用戶端活動會顯示在用戶端主控台視窗上。
如果用戶端和服務無法通訊,請參閱疑難排解秘訣。
注意: 這個範例會建置主控台應用程式用戶端程式。您必須使用命令提示字元加以啟動,才會看到範例的輸出。
若要跨機器執行範例
在服務機器上,建立一個名稱為 ServiceModelSamples 的虛擬目錄。您可以使用虛擬目錄安裝指示隨附的 Setupvroot.bat 指令碼,建立磁碟目錄和虛擬目錄。
將 service\bin 目錄中的 ESCalculator.dll 檔案複製到服務機器上的目錄。
從命令提示字元巡覽至服務機器上的這個目的目錄。如果使用 Windows Vista 或 Windows Server 2008,請務必使用系統管理員身分執行命令提示字元。
在服務機器上,輸入 gacutil.exe /i ESCalculator.dll,將組件新增至全域組件快取。
在服務機器上,輸入 regsvcs.exe ESCalculator.dll,向 COM+ 註冊組件的元件和 ServiceModelSample 應用程式。
在服務機器上,輸入 ComSvcConfig.exe /install /application:ServiceModelSample /contract:"ServiceModelSample.ESCalculator,ICalculator" /hosting:was /webDirectory:ServiceModelSamples /mex /verbose,將合約公開為裝載於 IIS 的服務。
將語言特定資料夾下 \client\bin\ 資料夾中的用戶端程式檔案複製到用戶端機器中。
在用戶端組態檔中,變更端點定義的位址值以符合服務的新位址。以位址中的完整網域名稱取代 "localhost" 的任何參考。
確定您可以使用瀏覽器,從用戶端機器存取服務。
在用戶端機器上,從命令提示字元啟動 Client.exe。
若要在使用範例之後進行清除
如果使用 Windows Vista 或 Windows Server 2008,請務必使用系統管理員身分執行命令提示字元。輸入 ComSvcConfig.exe /u /application:ServiceModelSample /contract:ServiceModelSample.ESCalculator,ICalculator,將 COM+ 整合解除安裝。
輸入 regsvcs.exe /u ESCalculator.dll,從 COM+ 解除安裝應用程式。
輸入 gacutil.exe /u ESCalculator,從全域組件快取移除元件。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.