wcf 例子
開發環境是vs2005 (需要安裝對wcf和wpf的擴展支持)。
1建立控制臺應用程序作為服務端。
///這是接口
??? [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);
??? }
//實現契約和接口
?public class CalculatorService : ICalculator
??? {
??????? public double Add(double n1, double n2)
??????? {
??????????? double result = n1 + n2;
??????????? Console.WriteLine("Received Add({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Subtract(double n1, double n2)
??????? {
??????????? double result = n1 - n2;
??????????? Console.WriteLine("Received Subtract({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Multiply(double n1, double n2)
??????? {
??????????? double result = n1 * n2;
??????????? Console.WriteLine("Received Multiply({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Divide(double n1, double n2)
??????? {
??????????? double result = n1 / n2;
??????????? Console.WriteLine("Received Divide({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??? }
//在main函數中執行
static void Main(string[] args)
??????? {
??????????? Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
??????????? ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
??????????? try
??????????? {
??????????????? // Add a service endpoint
??????????????? serviceHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
??????????????? // Enable metadata exchange
??????????????? ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
??????????????? smb.HttpGetEnabled = true;
??????????????? serviceHost.Description.Behaviors.Add(smb);
??????????????? serviceHost.Open();
??????????????? Console.WriteLine("The service is ready.");
??????????????? Console.WriteLine("Press <ENTER> to terminate service.");
??????????????? Console.WriteLine();
??????????????? Console.ReadLine();
??????????????? // Close the ServiceHostBase to shutdown the service.
??????????????? serviceHost.Close();
??????????? }
??????????? catch (CommunicationException ce)
??????????? {
??????????????? Console.WriteLine("An exception occured: {0}", ce.Message);
??????????????? serviceHost.Abort();
??????????? }
????????????
??????? }
然后服務器端就ok了。運行以后。在運行狀態下,把http://localhost:8000/ServiceModelSamples/Service在瀏覽器中運行。會看到頁面信息,提示使用svcutil.exe 工具。在vs2005命令提示符中運行這個命令。就會生成兩個文件,一個是cs文件一個是config文件。這個兩個需要在客戶端代碼中使用。生成的位置在dos窗口中都有提示。我還不知道怎么更改位置。但是可以使用out參數給這兩個文件改名字。
還有應該知道服務端的契約是request和reply模式。默認就是這個信息交換模式。
2客戶端。
也是建立一個控制臺應用程序,把前面生成的兩個文件都添加到這個項目里面。config可以改名成app.config。
在客戶端的main函數中實現代碼:
static void Main(string[] args)
??????? {
??????????? //Create an instance of the WCF Client.
??????????? System.ServiceModel.EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service/CalculatorService");
??????????? CalculatorClient client = new CalculatorClient(new WSHttpBinding(), epAddress);
???????????
??????????? // 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();
??????????? Console.WriteLine();
??????????? Console.WriteLine("Press <ENTER> to terminate client.");
??????????? Console.ReadLine();
??????? }
然后運行服務端程序。再運行客戶端程序就可以看到正確的結果。
這個例子沒有使用配置文件格式來寫契約和節點這些東西,是通過程序方式來實現契約,地址,節點等等,他們的效果是一樣的。
1建立控制臺應用程序作為服務端。
///這是接口
??? [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);
??? }
//實現契約和接口
?public class CalculatorService : ICalculator
??? {
??????? public double Add(double n1, double n2)
??????? {
??????????? double result = n1 + n2;
??????????? Console.WriteLine("Received Add({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Subtract(double n1, double n2)
??????? {
??????????? double result = n1 - n2;
??????????? Console.WriteLine("Received Subtract({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Multiply(double n1, double n2)
??????? {
??????????? double result = n1 * n2;
??????????? Console.WriteLine("Received Multiply({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??????? public double Divide(double n1, double n2)
??????? {
??????????? double result = n1 / n2;
??????????? Console.WriteLine("Received Divide({0},{1})", n1, n2);
??????????? Console.WriteLine("Return: {0}", result);
??????????? return result;
??????? }
??? }
//在main函數中執行
static void Main(string[] args)
??????? {
??????????? Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
??????????? ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
??????????? try
??????????? {
??????????????? // Add a service endpoint
??????????????? serviceHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
??????????????? // Enable metadata exchange
??????????????? ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
??????????????? smb.HttpGetEnabled = true;
??????????????? serviceHost.Description.Behaviors.Add(smb);
??????????????? serviceHost.Open();
??????????????? Console.WriteLine("The service is ready.");
??????????????? Console.WriteLine("Press <ENTER> to terminate service.");
??????????????? Console.WriteLine();
??????????????? Console.ReadLine();
??????????????? // Close the ServiceHostBase to shutdown the service.
??????????????? serviceHost.Close();
??????????? }
??????????? catch (CommunicationException ce)
??????????? {
??????????????? Console.WriteLine("An exception occured: {0}", ce.Message);
??????????????? serviceHost.Abort();
??????????? }
????????????
??????? }
然后服務器端就ok了。運行以后。在運行狀態下,把http://localhost:8000/ServiceModelSamples/Service在瀏覽器中運行。會看到頁面信息,提示使用svcutil.exe 工具。在vs2005命令提示符中運行這個命令。就會生成兩個文件,一個是cs文件一個是config文件。這個兩個需要在客戶端代碼中使用。生成的位置在dos窗口中都有提示。我還不知道怎么更改位置。但是可以使用out參數給這兩個文件改名字。
還有應該知道服務端的契約是request和reply模式。默認就是這個信息交換模式。
2客戶端。
也是建立一個控制臺應用程序,把前面生成的兩個文件都添加到這個項目里面。config可以改名成app.config。
在客戶端的main函數中實現代碼:
static void Main(string[] args)
??????? {
??????????? //Create an instance of the WCF Client.
??????????? System.ServiceModel.EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service/CalculatorService");
??????????? CalculatorClient client = new CalculatorClient(new WSHttpBinding(), epAddress);
???????????
??????????? // 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();
??????????? Console.WriteLine();
??????????? Console.WriteLine("Press <ENTER> to terminate client.");
??????????? Console.ReadLine();
??????? }
然后運行服務端程序。再運行客戶端程序就可以看到正確的結果。
這個例子沒有使用配置文件格式來寫契約和節點這些東西,是通過程序方式來實現契約,地址,節點等等,他們的效果是一樣的。
轉載于:https://www.cnblogs.com/lilyzhang/archive/2012/06/14/2549747.html
總結
- 上一篇: Ant脚本介绍
- 下一篇: Ajax--让网站与时俱进