WCF的ABC:
A代表Address-where(对象在哪里)
B代表Binding-how(通过什么协议取得对象)
C代表Contact(契约)-what(定义的对象是什么,如何操纵)
服务端
1.创建一个空的解决方案:WCFDemo:
2.创建一个宿主控制台程序:Host
3.右击Host项目,选择“添加”--“新建项”,选择“WCF服务”创建名为“Service1.cs”的服务
如此:VS2010已经为我们创建了 IService1.cs Service1.cs app.config 三个文件,其中IService1.cs和Service1.cs 创建了同属于Host命名空间的类,我们可以修改这三个文件:
IService1.cs :
using System.ServiceModel;
namespace Host
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
[ServiceContract]
public interface IService1
{
[OperationContract]
string DoWork(int value);
}
}
Service1.cs:
using System.ServiceModel;
namespace Host
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class Service1 : IService1
{
public string DoWork(int value)
{
int iPingfang = value * value;
return string.Format("经过平方后的值为:{0}",iPingfang );
}
}
}
App.config:
文件原则上可以不用改,但是address太长了(默认的为baseAddress="http://localhost:8732/Design_Time_Addresses/Host/Service1/")缩短为baseAddress=“http://localhost:8732/Service1/”
4.此外WCF服务必须在宿主进程中运行,我们可以修改 Program.cs 文件,创建宿主进程:
using System.ServiceModel;
namespace Host
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(Host.Service1)))
{
host.Open();
Console.WriteLine("服务已经启动......");
Console.ReadLine();
host.Close();
}
}
}
}
5.编译运行程序,生成Host.exe文件
客户端
1.启动刚创建的WCF服务宿主进程Host.exe
2.创建一个客户端控制台程序:Client
3.右击“引用”--“添加服务引用”,在“地址”的TextBox里面输入服务器的地址(就是咱们前面设置的baseaddress地址),并点击“前往”将得到目标服务器上面的Services,如下图所示:
如此,这一步将在客户端间接借助SvcUtil.exe文件创建客户端代理(命名空间为:using Client.ServiceReference1;)以及配置文件app.config,具体如下:
app.config:
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1">
4.修改客户端程序 Program.cs ,并使用代理访问服务契约:
using System.ServiceModel;
using Client.ServiceReference1;//引用命名空间
namespace Client
{
class Program
{
static void Main(string[] args)
{
ServiceReference1.Service1Client proxy = new Service1Client();
string str = proxy.DoWork(2);//运行服务端方法
Console.WriteLine(str);
Console.ReadLine();
}
}
}
5.编译运行程序,生成 Client.exe