wcf 例子
開發(fā)環(huán)境是vs2005 (需要安裝對wcf和wpf的擴(kuò)展支持)。
1建立控制臺(tái)應(yīng)用程序作為服務(wù)端。
///這是接口
??? [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);
??? }
//實(shí)現(xiàn)契約和接口
?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函數(shù)中執(zhí)行
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();
??????????? }
????????????
??????? }
然后服務(wù)器端就ok了。運(yùn)行以后。在運(yùn)行狀態(tài)下,把http://localhost:8000/ServiceModelSamples/Service在瀏覽器中運(yùn)行。會(huì)看到頁面信息,提示使用svcutil.exe 工具。在vs2005命令提示符中運(yùn)行這個(gè)命令。就會(huì)生成兩個(gè)文件,一個(gè)是cs文件一個(gè)是config文件。這個(gè)兩個(gè)需要在客戶端代碼中使用。生成的位置在dos窗口中都有提示。我還不知道怎么更改位置。但是可以使用out參數(shù)給這兩個(gè)文件改名字。
還有應(yīng)該知道服務(wù)端的契約是request和reply模式。默認(rèn)就是這個(gè)信息交換模式。
2客戶端。
也是建立一個(gè)控制臺(tái)應(yīng)用程序,把前面生成的兩個(gè)文件都添加到這個(gè)項(xiàng)目里面。config可以改名成app.config。
在客戶端的main函數(shù)中實(shí)現(xiàn)代碼:
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();
??????? }
然后運(yùn)行服務(wù)端程序。再運(yùn)行客戶端程序就可以看到正確的結(jié)果。
這個(gè)例子沒有使用配置文件格式來寫契約和節(jié)點(diǎn)這些東西,是通過程序方式來實(shí)現(xiàn)契約,地址,節(jié)點(diǎn)等等,他們的效果是一樣的。
1建立控制臺(tái)應(yīng)用程序作為服務(wù)端。
///這是接口
??? [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);
??? }
//實(shí)現(xiàn)契約和接口
?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函數(shù)中執(zhí)行
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();
??????????? }
????????????
??????? }
然后服務(wù)器端就ok了。運(yùn)行以后。在運(yùn)行狀態(tài)下,把http://localhost:8000/ServiceModelSamples/Service在瀏覽器中運(yùn)行。會(huì)看到頁面信息,提示使用svcutil.exe 工具。在vs2005命令提示符中運(yùn)行這個(gè)命令。就會(huì)生成兩個(gè)文件,一個(gè)是cs文件一個(gè)是config文件。這個(gè)兩個(gè)需要在客戶端代碼中使用。生成的位置在dos窗口中都有提示。我還不知道怎么更改位置。但是可以使用out參數(shù)給這兩個(gè)文件改名字。
還有應(yīng)該知道服務(wù)端的契約是request和reply模式。默認(rèn)就是這個(gè)信息交換模式。
2客戶端。
也是建立一個(gè)控制臺(tái)應(yīng)用程序,把前面生成的兩個(gè)文件都添加到這個(gè)項(xiàng)目里面。config可以改名成app.config。
在客戶端的main函數(shù)中實(shí)現(xiàn)代碼:
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();
??????? }
然后運(yùn)行服務(wù)端程序。再運(yùn)行客戶端程序就可以看到正確的結(jié)果。
這個(gè)例子沒有使用配置文件格式來寫契約和節(jié)點(diǎn)這些東西,是通過程序方式來實(shí)現(xiàn)契約,地址,節(jié)點(diǎn)等等,他們的效果是一樣的。
轉(zhuǎn)載于:https://www.cnblogs.com/lilyzhang/archive/2012/06/14/2549747.html
總結(jié)
- 上一篇: Ant脚本介绍
- 下一篇: Ajax--让网站与时俱进