wcf服务契约的重载
a. 服务端
.服务端 契约用OperationContract的Name实现重载
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WCF.Chapter2.Overloading.Host
{
[ServiceContract]
public interface IContract
{
[OperationContract(Name = "say1")]
string say(); [OperationContract(Name = "say2")]
string say(string str);
} }
.服务实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WCF.Chapter2.Overloading.Host.Service
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class Service1 : IContract
{
public string say()
{
return "老鼠扛刀,满街找猫";
} public string say(string str)
{
return str;
}
} }
.服务寄宿
using System;
using System.ServiceModel;
using WCF.Chapter2.Overloading.Host.Service;
namespace WCF.Chapter2.Overloading.Host
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(Service1)))
{
host.Opened += delegate
{
Console.WriteLine("服务已开启...");
};
host.Open();
Console.ReadLine();
} Console.WriteLine("服务已关闭...");
Console.ReadLine();
}
}
}
.终结点设置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MEX">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors> <services>
<service name="WCF.Chapter2.Overloading.Host.Service.Service1" behaviorConfiguration="MEX">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000"/>
</baseAddresses>
</host> <endpoint address="http://localhost:8001/say" binding="basicHttpBinding" contract="WCF.Chapter2.Overloading.Host.IContract"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
b. 客户端
.客户端契约 这个很重要需要和服务端分开不能用同一个契约,而是实现了一个等效契约,所以此处说明终结点三要素A,B,C 的A,B必须一模一样但是C只要等效就可以
using System;
using System.ServiceModel; namespace WCF.Chapter2.Overloading.Client
{
[ServiceContract]
public interface IContract
{
[OperationContract(Name = "say1")]
string say(); [OperationContract(Name = "say2")]
string say(string str);
}
}
.客户端代理 本质也是channelfactory.createchannel
using System;
using System.ServiceModel; namespace WCF.Chapter2.Overloading.Client
{
public class ClientProxy : ClientBase<IContract>, IContract
{
public ClientProxy()
{ } public ClientProxy(string configurationName) :
base(configurationName)
{ } public string say()
{
return base.Channel.say();
} public string say(string str)
{
return base.Channel.say(str);
}
}
} .客户端终结点配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost:8001/say" binding="basicHttpBinding" contract="WCF.Chapter2.Overloading.Client.IContract"></endpoint>
</client>
</system.serviceModel>
</configuration>
.调用代码
using System;
using System.ServiceModel; namespace WCF.Chapter2.Overloading.Client
{
public class ClientProxy : ClientBase<IContract>, IContract
{
public ClientProxy()
{ } public ClientProxy(string configurationName) :
base(configurationName)
{ } public string say()
{
return base.Channel.say();
} public string say(string str)
{
return base.Channel.say(str);
}
}
}
wcf服务契约的重载的更多相关文章
- WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...
- wcf服务契约代理链
意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...
- wcf服务契约继承
a. 服务端 .契约 使用了继承 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked ...
- WCF分布式开发步步为赢(5)服务契约与操作重载
继上一节WCF分布式开发步步为赢系列的(4):WCF服务可靠性传输配置与编程开发,本节我们继续学习WCF分布式开发步步为赢的第(5)节:服务契约与操作重载.这里我们首先讲解OOP面向对象的编程中方法重 ...
- 重温WCF之构建一个简单的WCF(一)(2)通过Windows Service寄宿服务和WCF中实现操作重载
参考地址:http://www.cnblogs.com/zhili/p/4039111.html 一.如何在Windows Services中寄宿WCF服务 第一步:创建Windows 服务项目,具体 ...
- 跟我一起学WCF(6)——深入解析服务契约[下篇]
一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...
- 跟我一起学WCF(5)——深入解析服务契约[上篇]
一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Cont ...
- wcf服务编程(第3版)文摘
第1章 wcf基础 什么是wcf: System.ServiceModel.dll 服务 服务的执行边界: proxy 地址:http/https,tcp,ipc,peer newwork,msmq, ...
- 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...
随机推荐
- multiprocess模块---进程---进程队列
首先明白几个概念: 同步:做完一件事情,再做另外一件事情 异步:做一件事情的时候,可以再做另外一件事情 阻塞:recv sleep accept input recvfrom 非阻塞:没有遇见上面这 ...
- UVA327
模拟 这个问题的任务是求解一组c语言里的表达式,但是你不需要知道c语言是怎么解决这个问题!每一行一个表达式,每个表达式的组成不会超过110个字符.待求解的表达式只包含一个int类型变量和一个组有限的操 ...
- systemctl管理系统配置、服务
systemctl daemon-reload \&& systemctl enable docker \&& systemctl start docker \& ...
- 在Android中把内容写到XML文件中
在Android中把内容写到XML文件中 saveXmlButton.setOnClickListener(new OnClickListener() { @Override public void ...
- 谈谈 Python 程序的运行原理
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...
- zabbix监控windows磁盘空间
监控windows磁盘空间,不是百分比. 当windows系统添加相应的windows模板后,会自动生成检测系统空间的监控项,在应用集(Filessystem)里面,Free disk space o ...
- jmeter java请求:java.lang.VerifyError: Cannot inherit from final class
被这个问题block了一天,应该是包冲突的.通过对包删减排查,结果发现是netty-all-xxx.Final.jar包的问题 应该是jmeter版本和netty版本的冲突吧,换成jmeter 3.1 ...
- 使用eclipse从github导入maven项目
github给的地址是类似https://github.com/xxx/se.git格式; 如何将其用eclipse导入呐? 第一步, Import Projects from Git 导入成功后 第 ...
- c++ vector, 迭代器
现代c++尽量使用vector(容器)和迭代器(相当于指针),少使用数组和指针,除非对程序执行效率有很高的要求. 容器优点,易于扩展,可通过push_back方法动态添加元素,数组不能动态添加元素. ...
- delphi webbrowser 执行 js ---转
EmbeddedWB1.OleObject.document.parentWindow.execScript(memo1.Text, 'javascript');