a. 服务端
.契约 使用了继承
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host
{
[ServiceContract]
public interface IHuman
{
[OperationContract]
string HumanSay();
} [ServiceContract]
public interface IMan : IHuman
{
[OperationContract]
string ManSay();
} [ServiceContract]
public interface IWoman : IHuman
{
[OperationContract]
string WomanSay();
}
}
.服务实现 实现了自己的具体的接口
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host
{
public class ManService : IMan
{
public string HumanSay()
{
return " 我是人,我会思考!";
} public string ManSay()
{
return "我是男人,我力气比较大!";
}
} public class WomanService : IWoman
{
public string HumanSay()
{
return " 我是人,我会思考!";
} public string WomanSay()
{
return "我是女人,我爱漂亮!";
}
}
} .服务终结点配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="WCF.Chapter2.InheritanceReworked.Host.ManService" behaviorConfiguration="MEX">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000"/>
</baseAddresses>
</host>
<endpoint address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Host.IMan"></endpoint>
</service> <service name="WCF.Chapter2.InheritanceReworked.Host.WomanService" behaviorConfiguration="MEX">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9000"/>
</baseAddresses>
</host>
<endpoint address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Host.IWoman"></endpoint>
</service>
</services> <behaviors>
<serviceBehaviors>
<behavior name="MEX">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
.服务寄宿开启
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost hostMan = new ServiceHost(typeof(ManService)))
{
hostMan.Opened += delegate
{
Console.WriteLine("Man服务已开启...");
};
hostMan.Open(); using (ServiceHost hostWoman = new ServiceHost(typeof(WomanService)))
{
hostWoman.Opened += delegate
{
Console.WriteLine("Woman服务已开启...");
};
hostWoman.Open(); Console.ReadLine();
}
Console.WriteLine("Woman服务已关闭..."); Console.ReadLine();
}
Console.WriteLine("Man服务已关闭...");
}
}
} b. 客户端
.客户端等效契约 除了命名空间不一样其他的都一样
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client
{
[ServiceContract]
public interface IHuman
{
[OperationContract]
string HumanSay();
} [ServiceContract]
public interface IMan : IHuman
{
[OperationContract]
string ManSay();
} [ServiceContract]
public interface IWoman : IHuman
{
[OperationContract]
string WomanSay();
}
}
.人类代理 男人和女人在服务端都实现了他,所以既可以是男人代表人,也可以是女人去代表人
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client
{
public class HumanProxy : ClientBase<IHuman>, IHuman
{
public HumanProxy()
{ } public HumanProxy(string configurationName) :
base(configurationName)
{ } public string HumanSay()
{
return base.Channel.HumanSay();
} }
}
.由2的结论这里给出终结点配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint name="human_man" address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IHuman"></endpoint>
<endpoint name="man" address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IMan"></endpoint>
<endpoint name="human_woman" address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IHuman"></endpoint>
<endpoint name="woman" address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IWoman"></endpoint>
</client>
</system.serviceModel>
</configuration>
.manProxy
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client
{
public class ManProxy : ClientBase<IMan>, IMan
{
public ManProxy()
{ } public ManProxy(string configurationName) :
base(configurationName)
{ } public string HumanSay()
{
return base.Channel.HumanSay();
} public string ManSay()
{
return base.Channel.ManSay();
}
}
}
.womenproxy
using System;
using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client
{
public class WomanProxy : ClientBase<IWoman>, IWoman
{
public WomanProxy()
{ } public WomanProxy(string configurationName) :
base(configurationName)
{ } public string HumanSay()
{
return base.Channel.HumanSay();
} public string WomanSay()
{
return base.Channel.WomanSay();
} }
} .客户端调用代理
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace WCF.Chapter2.InheritanceReworked.Client
{
class Program
{
static void Main(string[] args)
{
using (HumanProxy humanProxy_man = new HumanProxy("human_man"))
{
Console.WriteLine("humanProxy_man:");
Console.WriteLine(humanProxy_man.HumanSay());
Console.WriteLine("");
} using (HumanProxy humanProxy_woman = new HumanProxy("human_woman"))
{
Console.WriteLine("humanProxy_woman:");
Console.WriteLine(humanProxy_woman.HumanSay());
Console.WriteLine("");
} using (ManProxy manProxy = new ManProxy("man"))
{
Console.WriteLine("manProxy_human:");
Console.WriteLine(manProxy.HumanSay());
Console.WriteLine(""); Console.WriteLine("manProxy_man:");
Console.WriteLine(manProxy.ManSay());
Console.WriteLine("");
} using (WomanProxy womanProxy = new WomanProxy("woman"))
{
Console.WriteLine("womanProxy_human:");
Console.WriteLine(womanProxy.HumanSay());
Console.WriteLine(); Console.WriteLine("womanProxy_woman:");
Console.WriteLine(womanProxy.WomanSay());
Console.WriteLine();
} Console.ReadLine();
}
}
}

wcf服务契约继承的更多相关文章

  1. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  2. wcf服务契约代理链

    意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...

  3. wcf服务契约的重载

    a. 服务端 .服务端 契约用OperationContract的Name实现重载 using System; using System.Collections.Generic; using Syst ...

  4. 跟我一起学WCF(6)——深入解析服务契约[下篇]

    一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...

  5. 跟我一起学WCF(5)——深入解析服务契约[上篇]

    一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Cont ...

  6. 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

    废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...

  7. WCF服务属性注入基础设施

    WCF服务属性注入基础设施 WCF的服务的创建行为:使用默认构造函数创建WCF服务对象.如果我们想要在WCF内使用外部对象,最简单的方式就是把外部对象做成全局对象.然而这样的话会增加全局对象的数量,让 ...

  8. WCF服务寄宿IIS与Windows服务 - C#/.NET

    WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...

  9. WCF服务寄宿IIS与Windows服务

      WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...

随机推荐

  1. 《GPU高性能编程CUDA实战》第九章 原子性

    ▶ 本章介绍了原子操作,给出了基于原子操作的直方图计算的例子. ● 章节代码 #include <stdio.h> #include "cuda_runtime.h" ...

  2. THREE.JS 场景世界坐标和平面二维坐标互转

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. YII assets使用

    为什么用YII assets 1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件 ,但是我们又希望将module单独出来,所以需要使用发 ...

  4. UI5-文档-4.6-Modules

    在SAPUI5中,资源通常被称为模块.在这一步中,我们将上次练习中的警报替换为sap.m库中的适当消息Toast.所需的模块可以异步加载. Preview A message toast displa ...

  5. C# 通用方法

    一. /// <summary> /// 删除字符串中的中文 /// </summary> public static string Delete(string str) { ...

  6. Oracle SQL Developer在进行查询的时候只显示50条数据

    在查询结果大于50条的时候,软件默认会只显示50条,向下拉会继续显示. 想要显示所有结果的话,光标放在结果集:ctrl+End或者是ctrl+PgDn都可以.

  7. JAVA学习(七)__Spring的@Autowired注入规则

    @Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的? 经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找 ...

  8. ML_入门

    N-gram 输入法后来提醒nlp自然语言理解一个向量映射到另一个空间,为什么是向量呢?模型其实是向量,一张图片表示成向量,像素表示成rgb ,每一个维度 数的度文本变成向量 one-hot repr ...

  9. 判断TrueType字体

    function IsTrueTypeFont(FontName : string) : boolean;const  PITCH_MASK: byte = $0F;  var  TxMetric: ...

  10. IE下设置body{overflow:hidden;}失效Bug

    问题重现: <p>There are no scrollbars on this page in sane browsers</p> html, body, p { margi ...