• WCF


    可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑  第一步:创建一个空的解决方案,解决方案中有四个项目:

       

      IService项目需要引用System.ServiceModel  定义了服务契约的类库项目,

      CalculatorService项目引用IService项目,用于定义服务类型的项目,实现IService项目中定义的服务契约,

      WcfHost项目 是作为宿主的控制台项目,

     WcfClient 项目是模拟服务的客户端程序。

    第二步:创建服务契约

    复制代码 namespace IService {     [ServiceContract(Name = "CalculatorService", Namespace = "http://www.sun.com/")]     public interface ICalculatorService     {         [OperationContract]         double add(double x, double y);

            [OperationContract]         double Subtract(double x, double y);

            [OperationContract]         double Mul(double x, double y);

            [OperationContract]         double Divide(double x, double y);

        } }

    复制代码

         服务契约其实就是一接口,抽象定义服务的所有操作,说直白点,就是两个人说定好,我们该这样做,我们需要在接口上加上ServiceContract 特性 ,将其定义成服务契约,此外还需要说明契约的名称和命名空间。另外还需要在各个方法上定义OperationContract 特性,这样才能暴露给别人调用。

      第三步: 创建服务

      创建服务其实就是实现刚刚写好的接口

    复制代码   public class CalculatorService:ICalculatorService     {         public double add(double x, double y)         {             return x + y;         }

            public double Subtract(double x, double y)         {             return x - y;

            }

            public double Mul(double x, double y)         {             return x * y;         }

            public double Divide(double x, double y)         {             return x / y;         }     }

    复制代码

    第四步:通过自我寄宿的方式寄宿服务

      服务寄宿有两种方式:寄宿在IIS里面,自我寄宿的方式。我们这里使用的是自我寄宿的方式,即通过控制台的方式寄宿。

     WCF 采用终结点的方式进行通讯,终结点由即所谓的ABC组成,A-Address B-Binding  C-Contract 三元素组成,很好记得。

     地址(Address):决定服务的位置,解决服务寻址的问题。

     绑定(Banding):实现通讯的所有细节,包括网络传输,信息编码等等,WCF中有BasicHttpbinding,WSHttpbinding等等,

     契约(Contract):对服务契约的抽象操作。

    复制代码 class Program     {         static void Main(string[] args)         {             using(ServiceHost host = new ServiceHost(typeof(CalculatorService)))             {                 host.Opened += delegate                 {                     Console.WriteLine("服务启动。。。");                 };                 host.Open();                 Console.Read();             }         }     }

    复制代码

    当然这样肯定不行,我们需要在配置文件中配置刚刚所说的ABC 及终结点:

    复制代码 <?xml version="1.0" encoding="utf-8" ?> <configuration>     <startup>         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />     </startup>     <system.serviceModel>         <behaviors>             <serviceBehaviors>                 <behavior name="metadataBehavior">                     <serviceMetadata httpGetEnabled="true"  httpGetUrl="http://localhost:8080/calculatorservice/metadatebehavior" />                 </behavior>             </serviceBehaviors>         </behaviors>         <services>             <service name="CalculatorServices.CalculatorService" behaviorConfiguration="metadataBehavior">                 <endpoint address="http://localhost:8080/calculatorservice" binding="wsHttpBinding"  contract="IService.ICalculatorService"/>                                                    </service>         </services>             </system.serviceModel> </configuration>

    复制代码

    配置这里有几个坑 behaviorConfiguration属性的值必须在前面已经配置好<behavior name="metadataBehavior"> 节点 。<service name="CalculatorServices.CalculatorService" 这里的name值为继承了服务契约的完整类引用,包括完整的命名空间。即实现了接口的类。 contract="IService.ICalculatorService"/>  contract的值为服务契约的类引用,即我们创建的接口。

    宿主做好了 我们需要把宿主运行起来,这样客户端才能引用我们的服务,在运行宿主程序时又遇到一个坑了,直接运行报 HTTP 无法注册 URL http://+:8080/calculatorservice/。进程不具有此命名空间的访问权限 这个错误。原来宿主程序需要用管理员权限运行,我们关掉VS 以管理员权限打开再次运行就可以

     第五步:创建客户端调用程序

    这里也有个坑 地址是<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/calculatorservice/metadatebehavior" /> 节点中的地址

    客户端调用程序很简单:

    复制代码  class Program     {         static void Main(string[] args)         {             MSR.CalculatorServiceClient client = new MSR.CalculatorServiceClient();             //调用Add()方法             double add = client.add(1, 1);             Console.WriteLine(add);

                //调用Subtract()方法             double sub = client.Subtract(2, 1);             Console.WriteLine(sub);

                //调用Mul()方法             double mul = client.Mul(2, 1);             Console.WriteLine(mul);

                //调用div()方法             double div = client.Divide(2, 1);             Console.WriteLine(div);

                Console.Read();         }     }

    复制代码

     至此一个简单的WCF程序就此做完了。

  • 相关阅读:
    visual studio 2010设置
    Win7 x64 PL/SQL 连接 Oralce 提示 Could not initialize "%ORACLE_HOME%\bin\oci.dll"
    jxl导入/导出excel
    struts2的action与jsp之间传递参数
    web服务器、容器和中间件
    myeclipse trial expired 注册码解决办法(可用于8.5)
    Java中的内部类
    JS的trim()方法
    struts2 <s:property>用法
    EL表达式的使用
  • 原文地址:https://www.cnblogs.com/nxxshxf/p/6195432.html
Copyright © 2020-2023  润新知