WCF简单介绍
WCF(windows communication foundation)是微软推出的数据通信的统一编程模型,在WCF有四个主要的关键点:
abcd
Address(地址):定义服务的地址
Binding(绑定):定义通信的方式(传输协议等)
Contract(契约):定义服务的具体实现
enDpoint(终结点):由上面的abc共同构成终结点,用于服务端和客户端进行通信
WCF服务器创建
核心的dll:system.ServiceModel
由于WCF是面向服务的,面向接口的,所以首先需要创建一个服务接口
1.创建一个接口类IWCFTestService作为服务契约
2.创建一个接口的具体实现类WCFTestService
3.到此为止服务已经编写好了,接下来就是将这个服务放到宿主上,就可以作为服务被调用了。接下来创建一个控制台程序Host作为宿主。
class Program
{
static void Main(string[] args)
{
//将服务启动起来
using(ServiceHost host=new ServiceHost (typeof(BLL.WCFTestService)))
{
host.Open();
Console.WriteLine("服务已经启动");
Console.ReadKey();
host.Close();
}
}
}
4.契约部分已经编写完毕,然后就是address、binding、endpoint,这些都是在配置文件中进行配置
<configuration>
<system.serviceModel>
<services>
<service name="BLL.WCFTestService" behaviorConfiguration="behaviorConfiguration">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9000/"/>
</baseAddresses>
</host>
<endpoint address="http://localhost:9000/" binding="basicHttpBinding" contract="IBLL.IWCFTestService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorConfiguration">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
5.启动控制台程序将服务挂起,然后在浏览器中输入终结点网址,http://localhost:9000/,如下所示,表示服务创建成功
6.接下来新建一个客户端,WindowsForm程序对创建的服务进行测试。可以直接跟WebService程序一样直接添加服务引用,系统生成代理类,然后调用相应的api
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtOne.Text) || string.IsNullOrEmpty(txtTwo.Text))
{
MessageBox.Show("请输入正确的数字");
}
else
{
double one = double.Parse(txtOne.Text);
double two = double.Parse(txtTwo.Text);
WCFServiceReference.WCFTestServiceClient client = new WCFServiceReference.WCFTestServiceClient();
double result= client.Add(one,two );
txtResult.Text = result.ToString();
}
}
7.补充
WCF可以寄宿在任意类型的项目中,如何将WCF服务发布到IIS中去呢,只要创建一个空的web应用程序,然后将这个应用程序发布到IIS中就可以了,你需要在这个web项目中,添加一个“WCF服务”,这是一个一svc为后缀名的文件,添加后系统会默认的创建出契约的接口和实现类。只需要将服务的逻辑添加上,并修改配置文件即可。如果你希望将WCF寄宿到WindowsForm中去,最好不要将启动服务的代码写在Form()初始化中,应该写到Program.cs中,这样可以有效的避免,UI线程堵塞。
上面我们已经创建好了契约,那么如何将我们已经写好的契约添加到空的Web应用程序中呢?
1.添加一个文件。同时将文件的后缀名修改为svc,文件内容:
<%@ ServiceHost Service="BLL.WCFTestService" %>
2.配置web.config文件
<configuration>
<system.serviceModel>
<services>
<service name="BLL.WCFTestService" behaviorConfiguration="behaviorConfiguration">
<endpoint binding="basicHttpBinding" contract="IBLL.IWCFTestService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorConfiguration">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
上面的配置文件中,没有对address进行配置,因为当部署到IIS上的时候,会为程序分配地址和端口号,服务默认的使用IIS的地址