前面我写过一个用WCF开发的聊天程序,大家可以翻看前面的博文。
在那个聊天程 序中,我是不引用服务而直接使用WCF。之前没有跟大家说这一知识点,对于初学者朋友来说 ,可能不知道怎么回事。
我们之所以说WCF比一般的Web Service要强大得多,是因为 它要比一般的Web服务要灵活得多,而且它不仅仅能在IIS服务器上运行,其实它可以用很多 种方法来运行,哪怕一个控制台应用程序。
现在,大家可以回忆一下前面我写的《传 说中的WCF》,我上面的例子绝大多数都是控制台应用程序类型的。我们应当把WCF理解为一 种通信技术,而不只是服务。前面的例子中我是告诉大家,完成服务器端后,就在客户端项 目中添加服务引用,这样就生成了客户端代理类,我们就可以像平时使用一般类型一样使用 了。
其实按照我们前面所讲的方法,也足以完成许多实际任务了。大家是否还想拓展 一下呢? 有朋友肯定会问了:再拓展会不会变得很难? 放心吧,不会很难,相信我,老周从 来不会讲大家都看不懂的东西的。
我们现在不妨尝试一下,在客户端不添加服务引用 ,而是由我们自己来编写调用服务的代理类。要做到这一点,首先我们要明确的,其实我们 所编写的服务协定,在服务器和客户端都需要用到,如果大家查看过添加服务引用时由工具 生成的代码,会发现其实它在客户端也生成了服务协定的代码。所以,在我们手动编写调用 服务的代码时,也需要这样,因此有两种方法可以在服务器和客户端之间共用服务协定,一 是把代码复制一下粘贴到客户端中,另一种方法,我们可以新建一个类库,然后把服务协定 写到这个类库中,最后在服务器端和客户端都引用这个类库即可。举个例子,假如有以下定 义的协定:
[ServiceContract] public interface ITest { [OperationContract] int Add(int a, int b); [OperationContract] int GetRandmon(); [OperationContract] int Multiply(int a, int b); }
然后,我们在服务器端实现协定,注意:接口在服务器端实现即可,客户端不需 要。
// 实现服务 public class MyService : CommonLib.ITest { Random m_rand = null; // 构造函数 public MyService() { m_rand = new Random(); } public int Add(int a, int b) { return a + b; } public int GetRandmon() { return m_rand.Next(); } public int Multiply(int a, int b) { return a * b; } }
接着,和以前一样,创建服务主机,并侦听客户端调用。
static void Main(string[] args) { ServiceHost host = new ServiceHost(typeof(MyService)); // HTTP方式 WSHttpBinding httpBinding = new WSHttpBinding(SecurityMode.None); host.AddServiceEndpoint(typeof(CommonLib.ITest), httpBinding, "http://localhost:8900/"); // TCP方式 NetTcpBinding tcpBinding = new NetTcpBinding(SecurityMode.None); host.AddServiceEndpoint(typeof(CommonLib.ITest), tcpBinding, "net.tcp://localhost:1700/"); // 打开服务 host.Open(); Console.WriteLine("服务已启动。"); Console.Read(); host.Close(); }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索客户端
, 服务器
, int
, 服务
, 前面
, public
, 服务引用
, wcf 服务引用
wcf引用
wcf测试客户端、wcf客户端调用、wcf获取客户端ip、wcf 客户端、wcf 客户端代理类,以便于您获取更多的相关知识。