首页 > 代码库 > 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); } }
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;
}
}
}
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>
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(); } } } }
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(); } } }
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); //} }
2.7 分别启动两个exe文件
3 我们也可以自己建立一个客户端
3.1 创键控制台应用程序
3.2 添加服务引用
3.3 运行结果
WCF简介-01