类库 System.ServiceModle

WCF类库

契约IUser1,实现User1

  1. [ServiceContract]
  2. public interface IUser1
  3. {
  4. [OperationContract]
  5. string GetUser1Name(string name);
  6. }
  7.  
  8. public class User1 : IUser1
  9. {
  10. public string GetUser1Name(string name)
  11. {
  12. return "我是usre1" + name;
  13. }
  14. }

契约IUser2 ,实现User2

  1. [ServiceContract]
  2. public interface IUser2
  3. {
  4. [OperationContract]
  5. string GetUser1Name(string name);
  6. }
  7.  
  8. public class User2 : IUser2
  9. {
  10. public string GetUser1Name(string name)
  11. {
  12. return "我是user2" + name;
  13. }
  14. }

契约IUnity1和IUnity2,实现Unity(一个实现继承了两个契约,主意看一下配置文件如何配置)

  1. [ServiceContract]
  2. public interface IUnity1
  3. {
  4. [OperationContract]
  5. int GetUnityCount();
  6. }
  7.  
  8. [ServiceContract]
  9. public interface IUnity2
  10. {
  11. [OperationContract]
  12. string GetUnityString();
  13. }
  14.  
  15. public class Unity : IUnity1, IUnity2
  16. {
  17. public int GetUnityCount()
  18. {
  19. return ;
  20. }
  21.  
  22. public string GetUnityString()
  23. {
  24. return "Unity";
  25. }
  26. }

宿主

  1. static void Main(string[] args)
  2. {
  3. ServiceHost sh1 = new ServiceHost(typeof(WcfLib.User1));
  4. sh1.Open();
  5. Console.WriteLine("服务1开启");
  6. ServiceHost sh2 = new ServiceHost(typeof(WcfLib.User2));
  7. sh2.Open();
  8. Console.WriteLine("服务2开启");
  9. ServiceHost sh3 = new ServiceHost(typeof(WcfLib.Unity.Unity));
  10. sh3.Open();
  11. Console.WriteLine("服务3开启");
  12. Console.ReadKey();
  13. }

  服务配置文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  5. </startup>
  6. <system.serviceModel>
  7. <services>
  8. <!--name="命名空间名称.实现类名称"-->
  9. <service name="WcfLib.User1" behaviorConfiguration="mexBehaviour">
  10. <endpoint address="MyServices1" binding="basicHttpBinding" contract="WcfLib.IUser1">
  11. </endpoint>
  12. <host>
  13. <baseAddresses>
  14. <add baseAddress="http://localhost:9999/"/>
  15. </baseAddresses>
  16. </host>
  17. </service>
  18. <service name="WcfLib.User2" behaviorConfiguration="mexBehaviour">
  19. <host>
  20. <baseAddresses>
  21. <add baseAddress="http://localhost:6666/"/>
  22. </baseAddresses>
  23. </host>
  24. <endpoint address="MyServices2" binding="basicHttpBinding" contract="WcfLib.IUser2"></endpoint>
  25. </service>
  26. <service name="WcfLib.Unity.Unity" behaviorConfiguration="mexBehaviour">
  27. <host>
  28. <baseAddresses>
  29. <add baseAddress="http://localhost:7777/"/>
  30. <add baseAddress="net.tcp://localhost:7776/"/>
  31. </baseAddresses>
  32. </host>
  33. <endpoint address="MyServices3" binding="basicHttpBinding" contract="WcfLib.Unity.IUnity1" ></endpoint>
  34. <!--错误:找不到具有绑定 NetTcpBinding 的终结点的与方案 net.tcp 匹配的基址。注 册的基址方案是 [http]。 解决:TCP通讯 地址必须是TCP的(TCP不能宿主在IIS上) net.tcp://localhost:7776/-->
  35. <endpoint address="MyServices4" binding="netTcpBinding" contract="WcfLib.Unity.IUnity2"></endpoint>
  36. </service>
  37. </services>
  38.  
  39. <behaviors>
  40. <serviceBehaviors>
  41. <behavior name="mexBehaviour">
  42. <!--设置未false被人不能发现,一般当客户端已经加载好服务代理就可以设置为false了。配置修改,服务要重启,才能生效-->
  43. <serviceMetadata httpGetEnabled="true" />
  44. </behavior>
  45. <behavior>
  46. </behavior>
  47. </serviceBehaviors>
  48. </behaviors>
  49. </system.serviceModel>
  50. </configuration>

客户端

右键添加服务

配置文件自动生成

  1. static void Main(string[] args)
  2. {
  3. WCFServiceUser1.User1Client cli1 = new WCFServiceUser1.User1Client();
  4. WCFServiceUser2.User2Client cli2 = new WCFServiceUser2.User2Client();
  5. WCFServiceUnity.Unity1Client cli3 = new WCFServiceUnity.Unity1Client();
  6. WCFServiceUnity.Unity2Client cli4 = new WCFServiceUnity.Unity2Client();
  7. Console.WriteLine(cli1.GetUser1Name("name1"));
  8. Console.WriteLine(cli2.GetUser1Name("name2"));
  9. Console.WriteLine(cli3.GetUnityCount());
  10. Console.WriteLine(cli4.GetUnityString());
  11. }

WCF 调用服务标准写法

  1. static void Main(string[] args)
  2. {
  3. //不适用using,原因using在网络中断时,wcf不能关闭。websevice可以是用using释放,websevice标准写法是用using
  4. CustomService.UserServiceSoapClient ucli = null;
  5. try
  6. {
  7. ucli = new CustomService.UserServiceSoapClient();
  8. ucli.GetStr("");
  9. //手动释放,
  10. ucli.Close();
  11. }
  12. catch (Exception)
  13. {
  14. if (ucli != null)
  15. {
  16. ucli.Abort();
  17. }
  18. }
  19. }

源码下载

WCF-初识DEMO的更多相关文章

  1. WCF简单Demo

    WCF,光看书的原理,稍微有点枯燥,通过自己动手,会更容易理解契约声明,面向服务,分布式等概念. 1.创建WCF服务. 2.WcfService1.CS中声明新的契约. namespace WcfSe ...

  2. WCF学习笔记之WCF初识

    这篇博客将介绍WCF的最基础内容,让我们对WCF有一个基本的认识.后续的博客中将会介绍WCF其他方面内容.本篇博客将通过一个简单的例子,介绍如何创建WCF服务,并承载这个服务,让客户端来访问它.下面请 ...

  3. WCF初识

    WCF能干什么? 在win32中,应用程序是运行在进程的线程中的,.NET出现之后,出现了AppDomain,其实就相当于在进程和线程之间又又了一层包装层,类似于子进程的概念,在一个进程或者应用程序域 ...

  4. WCF 初识(一)

    WCF的前世今生 在.NETFramework 2.0以及前版本中,微软发展了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/H ...

  5. C# WCF初识

    原文:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 方式1: 需引用 System.ServiceModel namespa ...

  6. WCF:初识

    结构: using System.ServiceModel; namespace MyServices { [ServiceContract] public interface IHomeServic ...

  7. wcf,jquery,post,跨域

    参照了网上的很多资料,vs2012 项目是wcf服务. .demo地址http://files.cnblogs.com/files/dswyzx/WcfServiceDemoa.rar

  8. UI层调用WCF服务实例(源码)

    WCF原理性的东西,暂时还没有深入研究,只是在公司的项目中使用到了,会调用,然后再多做了一些了解,现在将它抽出来了一个小实例,写了一个WCF的demo. 我写的这个WCF.Demo主要包括数据契约和服 ...

  9. WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法

    本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...

  10. websocket初识

    一.官网 官网地址:http://www.websocket.org/ 二.websocket初识demo <input id="sendTxt" type="te ...

随机推荐

  1. jquery实现图片切换

    <div> <img class="imgclick" src="img/pic1.png" /> </div> <s ...

  2. Web前端-JavaScript基础教程下

    Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...

  3. PHP全栈学习笔记26

    php 验证码 <?php /* *@Author: 达叔小生 **/ header("Content-type:image/png"); // 发送头部信息,生成png图片 ...

  4. 视觉SLAM十四讲(三)——三维空间刚体运动(下)

    理论部分请看 :三维空间刚体运动 一.Eigen的使用 首先安装 Eigen: sudo apt-get install libeigen3-dev 一般都安装在 /usr/include/eigen ...

  5. zabbix(4)数据库表分区优化

    一.zabbix 数据库存储 zabbix-server将采集到的数据存储在数据库(mysql.oracle等),而数据存储的大小与每秒处理的数量量有关,因此数据存储取决于以下两个因数: (1)Req ...

  6. 第六章、Linux 的档案权限不目彔配置

    1. 使用者不群组 2. Linux 档案权限概念 2.1 Linux 文件属怅 2.2 如何改变文件属怅不权限: chgrp, chown, chmod 2.3 目彔不档案乀权限意丿 2.4 Lin ...

  7. 深入理解JVM虚拟机4:Java class介绍与解析实践

      用java解析class文件 转自https://juejin.im/post/589834a20ce4630056097a56 前言 身为一个java程序员,怎么能不了解JVM呢,倘若想学习JV ...

  8. NLog用法

    NLog是什么 NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单灵活的.NET日志记录类库.通过使用NLog,我们可以在任何一种 ...

  9. 【Java】能提高日常工作效率的一些Java函数

    自编工具总是临时抱佛脚来得顺溜,宜常备手边以提高工作效率: package com.hy; import java.io.File; /** * 日常工作常用的一些工具方法 * @author 逆火 ...

  10. 如何在linux中测试i2c slave模式驱动的功能?

    1. 硬件要求 1.1 需要两台机器,一台作为i2c master(记为M),另一台作为i2c slave(记为S) 1.2 使用杜邦线连接两台机器的i2c信号线 2. 使能内核选项CONFIG_I2 ...