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程序的 ...
随机推荐
- 解决Visual Studio “无法导入以下密钥文件”的错误
错误1无法导入以下密钥文件: Common.pfx.该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_ 1110Co ...
- require.js 学习基础
RequireJS 是一个JavaScript模块加载器,他的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代码,但其主要目的还是为了代 ...
- javascript 浮点数加减乘除计算会有问题, 整理了以下代码来规避这个问题
/* * js数学计算 add by yan */ /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较 ...
- Status Code:405 Method Not Allowed
场景: 前端调用方法的时候,调不通,并且报错信息为405 因为我们公司前后端分离开发,于是前端就来找我说我写的接口有问题?于是我就在这里的postman中测试发现没问题啊. 然后我好好看了一下报错信息 ...
- ArcGIS案例学习笔记3_2
ArcGIS案例学习笔记3_2 联系方式:谢老师,135-4855-4328, xiexiaokui#qq.com 时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性, ...
- fiddler无法抓取chrome解决方法
前端开发中,不可避免的要和服务器端进行联调,少了fiddler这个利器可不行. 由于无线开发需要配置UA,我使用chrome进行访问,但是今儿一早过来,发现fiddler无法抓取chrome的请求了. ...
- 吴裕雄 数据挖掘与分析案例实战(3)——python数值计算工具:Numpy
# 导入模块,并重命名为npimport numpy as np# 单个列表创建一维数组arr1 = np.array([3,10,8,7,34,11,28,72])print('一维数组:\n',a ...
- linux下面得小数计算
可以通过命令行向awk中传递参数. 这样子传递进去的参数,在awk命令中可以访问.每一项都必须作为单一的一个参数来解释.所以,等号之间不能有空格. 比如说我们传递进去一个学生名字,想查这个学生的得分. ...
- Ajax 与 jquery
jquery 里面的ajax用法: $.ajax({ 参数设置: 如果返回数据不是json的时候,记得转化为json . var data = json.parse(data); json 可以直接点 ...
- 查看端口号根据pid号找到相关占用端口应用
查看端口号根据pid号找到相关占用端口应用 8080 端口被占用不知道被哪个应用软件占用,下面我来教你查出那个该死的应用 方法/步骤 1 首先用netstat 找到端口对应的pid号,找到之后 ...