zoukankan      html  css  js  c++  java
  • WCF很简单的例子

    最近看看了wcf,中文资料,英文书籍都看来。就是没有一个最简单的入门例子。还是在msdn上看到一个很简单的入门例子。
    这里面就不说明其他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();
            }
    然后运行服务端程序。再运行客户端程序就可以看到正确的结果。

    这个例子没有使用配置文件格式来写契约和节点这些东西,是通过程序方式来实现契约,地址,节点等等,他们的效果是一样的。

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    github免费私有仓库使用
    空间域平滑滤波器
    Matlab常用函数
    图像处理之图像的平滑与锐化
    Matlab实现直方图均衡化
    matlab图像灰度调整——imadjust函数的使用
    调整图像大小调整图片大小
    Matlab 图像平移、旋转、缩放、镜像
    Matlab注释的几个方法
    训练一个神经网络 能让她认得我
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319463.html
Copyright © 2011-2022 走看看