首页 > 代码库 > WCF简介-01

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.0\Common7\IDE\WcfTestClient.exe

技术分享

 2 客户端程序

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

F:\Users\home\Documents\Visual Studio 2013\WCFDemo\Solution1\Client

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 运行结果

技术分享

WCF简介-01