wcf服务契约继承
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服务契约继承的更多相关文章
- WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...
- wcf服务契约代理链
意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...
- wcf服务契约的重载
a. 服务端 .服务端 契约用OperationContract的Name实现重载 using System; using System.Collections.Generic; using Syst ...
- 跟我一起学WCF(6)——深入解析服务契约[下篇]
一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...
- 跟我一起学WCF(5)——深入解析服务契约[上篇]
一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Cont ...
- 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...
- WCF服务属性注入基础设施
WCF服务属性注入基础设施 WCF的服务的创建行为:使用默认构造函数创建WCF服务对象.如果我们想要在WCF内使用外部对象,最简单的方式就是把外部对象做成全局对象.然而这样的话会增加全局对象的数量,让 ...
- WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...
- WCF服务寄宿IIS与Windows服务
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...
随机推荐
- python3解析XML文件
软硬件环境 Ubuntu 15.10 32bit Python 3.5.1 PyQt 5.5.1 前言 Python解析XML的方法挺多,本文主要是利用ElementTree来完成. 实例讲解 解析X ...
- python 编码文件json.loads json.dumps
import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps(d, ensure_ascii=False, encoding=' ...
- https Configure a Spring Boot app for HTTPS on Amazon AWS.
参考: https://geocolumbus.github.io/HTTPS-ELB-AWS-Spring-Boot/ 1. 在服务器端配置 证书 域名 映射 2. 导入依赖: <depe ...
- icil 参考docker
@All 有不知道怎么用docker发布项目的,请参考 http://192.168.18.224:8888/svn/Enterprise/site/docker/overview of docker ...
- oracle imp dmp
windows>cmd> imp userid=用户名/密码@orcl file=d:\nc60.dmp full=y imp userid=SYSTEM/password@orcl fi ...
- hibernate-注解及配置
联合主键: 一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不 ...
- windows10配置java开发环境
一.下载jdk 二.安装jdk路径,这个路径不能包含中文名 三.系统会提示安装jre,安装目录不要是jdk的安装目录,否则会覆盖掉jdk目录下的jre目录 四. .;%JAVA_HOME%\lib;% ...
- Data Guard 介绍
- webpack项目在开发环境中使用静态css文件
webpack项目在开发环境中使用静态css文件 在webpack项目(本人使用的 vue-cli-webpack )中,需要引入 css 或 scss等样式文件时,本人目前知道的,通常有以下几种方法 ...
- CTR点击率预估干货分享
CTR点击率预估干货分享 http://blog.csdn.net/bitcarmanlee/article/details/52138713