标签:
在上一篇中,我们创建了一个简单的WCF服务,那么接着在这一篇我们来展示一下,如何让一个WCF实现多个服务契约。
1、创建WCF服务契约
在上一篇中只是创建了一个WCF服务契约,这次为了展示WCF实现多个服务契约,所以创建两个服务契约。
<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace CompanyService
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“ICompanyService”。
[ServiceContract]
public interface ICompanyPublicService
{
[OperationContract]
string GetPublicInfomation();
}
[ServiceContract]
public interface ICompanyConfidentialService
{
[OperationContract]
string GetConfidentialInfomation();
}
}
</span>2.创建WCF服务
让WCF服务同时实现这两个服务契约
<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace CompanyService
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“CompanyService”。
public class CompanyService : ICompanyConfidentialService,ICompanyPublicService
{
public string GetConfidentialInfomation()
{
return "This is public information";
}
public string GetPublicInfomation()
{
return "This is confidential information";
}
}
}
</span>
3、创建宿主
同上篇博客中的配置类似,WCF服务还是需要依赖于宿主,宿主中的配置文件如下
<span style="font-family:SimSun;font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<services>
<service name="CompanyService.CompanyService" behaviorConfiguration="mexBehavior">
<endpoint address="CompanyService" binding="basicHttpBinding" contract="CompanyService.ICompanyPublicService">
</endpoint>
<endpoint address="CompanyService" binding="netTcpBinding" contract="CompanyService.ICompanyConfidentialService">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
<add baseAddress="net.tcp://localhost:8090/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mexBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration></span>在宿主中启动我们创建的服务
<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace CompanyServiceHost
{
class Program
{
static void Main(string[] args)
{
using(ServiceHost host=new ServiceHost(typeof(CompanyService.CompanyService)))
{
host.Open();
Console.WriteLine("host started" + DateTime.Now);
Console.ReadLine();
}
}
}
}
</span>5、创建web客户端
剩下的过程,就是在web客户单中引用我们的服务,根据自己的需求来调用不同的服务实现。
<span style="font-family:SimSun;font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CompanyClient
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
CompanyService.CompanyPublicServiceClient client = new CompanyService.CompanyPublicServiceClient("BasicHttpBinding_ICompanyPublicService");
Label1.Text = client.GetPublicInfomation();
}
protected void Button2_Click(object sender, EventArgs e)
{
CompanyService.CompanyConfidentialServiceClient client = new CompanyService.CompanyConfidentialServiceClient("NetTcpBinding_ICompanyConfidentialService");
Label2.Text = client.GetConfidentialInfomation();
}
}
}</span>6、小结
本篇博客通过一个Demo,向大家展示了一个WCF服务实现多个服务契约。下一篇博客的内容是如何在不停止客户端的情况下,改变一个WCF服务。
本篇博客DEMO:WCF服务实现多个服务契约
WCF service implementing multiple service contracts
标签:
原文地址:http://blog.csdn.net/luckyzhoustar/article/details/46300461