zoukankan      html  css  js  c++  java
  • WCF简介-01

    WCF Windows Communication Foundation

    1.1 新建一个"空白解决方案"

    1.2 在解决方案中添加类库IBLL

      1.2.1 添加接口IUserInfoService  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IBLL
    {
        [ServiceContract]
       public  interface IUserInfo
        {
            [OperationContract]
            int Add(int a ,int b);
        }
    }
    IUserInfo

      1.2.2 添加引用 System.ServiceModel

    1.3 添加类库BLL

      1.3.1 添加引用IBLL

      1.3.2 添加类UserInfoService实现接口IBLL

    using IBLL;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace BLL
    {
       public class UserInfoService:IUserInfoService
        {
            public int Add(int a, int b)
            {
                return a + b;
            }
        }
    }
    UserInfoService

    1.4 将WCF布置到控制台程序

      1.4.1 添加控制台程序Host

      1.4.2 添加引用BLL和IBLL

      1.4.3 修改App.config文件  

    <?xml version="1.0" encoding="utf-8" ?>
    
    
    <configuration>
    
    
      <system.serviceModel>
    
    
        <services>
    
    
          <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
    
    
            <host>
    
    
              <baseAddresses>
    
    
                <add baseAddress="http://localhost:8000/"/>
    
    
              </baseAddresses>
    
    
            </host>
    
    
            <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint>
    
    
          </service>
    
    
        </services>
    
    
        <behaviors>
    
    
          <serviceBehaviors>
    
    
            <behavior name="behaviorConfiguration">
    
    
              <serviceMetadata httpGetEnabled="true"/>
    
    
            </behavior>
    
    
          </serviceBehaviors>
    
    
        </behaviors>
    
    
      </system.serviceModel>
    
    
    </configuration>
    App.config

      1.4.4 添加引用System.ServiceModel  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Host
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(BLL.UserInfoService)))
                {
                    host.Open();
                    Console.WriteLine("服务启动成功!");
                    Console.ReadKey();
                }
            }
        }
    }
    Main

      1.4.5 进入debug目录,以管理员身份启动

    1.4.6 启动客户端测试服务程序

      VS安装目录下F:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEWcfTestClient.exe

     2 客户端程序

      2.1 控制台程序-新建控制台程序

    F:UsershomeDocumentsVisual Studio 2013WCFDemoSolution1Client

    svcutil http://localhost:8000/?wsdl /o:UserInfoServiceClient.cs

    2.2 将生成的文件包括到项目中

    2.3 勇output.config文件替换掉App.config文件(删App,将output重命名)

    2.4 添加引用BLL,IBLL和ServiceModel

    2.5 client 中main方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Client
    {
        class Program
        {
            static void Main(string[] args)
            {
                UserInfoServiceClient client = new UserInfoServiceClient();
                int sum = client.Add(3,6);
                Console.WriteLine(sum);
                Console.ReadKey();
            }
        }
    }
    Main

    2.6 改造自动生成的

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     此代码由工具生成。
    //     运行时版本:4.0.30319.42000
    //
    //     对此文件的更改可能会导致不正确的行为,并且如果
    //     重新生成代码,这些更改将会丢失。
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    
    
    //[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    //[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IUserInfoService")]
    //public interface IUserInfoService
    //{
        
    //    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUserInfoService/Add", ReplyAction="http://tempuri.org/IUserInfoService/AddResponse")]
    //    int Add(int a, int b);
        
    //    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUserInfoService/Add", ReplyAction="http://tempuri.org/IUserInfoService/AddResponse")]
    //    System.Threading.Tasks.Task<int> AddAsync(int a, int b);
    //}
    
    using IBLL;
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    public interface IUserInfoServiceChannel : IUserInfoService, System.ServiceModel.IClientChannel
    {
    }
    
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    public partial class UserInfoServiceClient : System.ServiceModel.ClientBase<IUserInfoService>, IUserInfoService
    {
        
        public UserInfoServiceClient()
        {
        }
        
        public UserInfoServiceClient(string endpointConfigurationName) : 
                base(endpointConfigurationName)
        {
        }
        
        public UserInfoServiceClient(string endpointConfigurationName, string remoteAddress) : 
                base(endpointConfigurationName, remoteAddress)
        {
        }
        
        public UserInfoServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
                base(endpointConfigurationName, remoteAddress)
        {
        }
        
        public UserInfoServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
                base(binding, remoteAddress)
        {
        }
        
        public int Add(int a, int b)
        {
            return base.Channel.Add(a, b);
        }
    
        //public System.Threading.Tasks.Task<int> AddAsync(int a, int b)
        //{
        //    return base.Channel.AddAsync(a, b);
        //}
    }
    UserInfoServiceClient

    2.7 分别启动两个exe文件

    3 我们也可以自己建立一个客户端

      3.1 创键控制台应用程序

      3.2 添加服务引用

      3.3 运行结果

  • 相关阅读:
    OpenStack 企业私有云的若干需求(5):主流硬件支持、云快速交付 和 SLA 保证
    OpenStack 企业私有云的若干需求(4):混合云支持 (Hybrid Cloud Support)
    超千个节点OpenStack私有云案例(1):CERN 5000+ 计算节点私有云
    OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)
    理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)
    理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术
    理解 Linux 网络栈(1):Linux 网络协议栈简单总结
    矩阵连乘最优结合 动态规划求解
    不用中间变量交换两个数 swap(a,b);
    java中String、StringBuffer、StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/YK2012/p/6687682.html
Copyright © 2011-2022 走看看