内容简介:那天有个小孩教我WCF【2/31】
WCF整体系统学习,2016-11-11 -2016-11-27 开发环境vs2015 .net framework 4.0 触屏WPF教程暂时搁置
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
啥契约,来说都是一个接口,在C#中,接口拓展一个类的行为,添加一个统一风格,到处收儿子。
服务,数据,消息
我想花费31天,系统学习WCF,跟上脚步,修炼 内功
控制WSDL文档的生成
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
作为 ServiceContract 特性,有很多成员
SC成员
CallbackContract 当契约是双工时候,读取或设置回调契约的类型
ConfigurationName 获取或设置服务在应用程序配置文件中的名称
HasProtectionLevel 读取一个值,表示此成员是否有一个保护级别
Name 获取或设置WSDL 文档中<portType>节点的名称
Namespace 获取或设置WSDL 文档中<portType>节点的命名空间
ProtectionLevel 设置对契约的绑定是否支持ProtectionLevel属性的值
SessionMode 获取或设置会话是否允许,以及是否得到了请求
以上同样适用 OperationContract 特性
其他OC成员
Action 定义能够唯一标识此操作的动作,WCF根据此动作把请求消息发送给响应的操作
AsyncPattern 标识操作已实现,也可以用Begin/End方法进行异步调用
HasProtectionLevel 标识ProtectionLevel属性是否已 使显式地进行设置
IsOneWay 表示操作只有单个输入消息,没有响应的输出消息
IsInitiating 定义操作是否是会话过程的一个初始操作
IsTerminating 定义在操作结束后WCF是否终止当前会话
ProtectionLevel 定义操作在运行时需要的消息级安全保护
DEMO演示 解决方法重载 对外暴露
新建IProductService 接口
下面有段代码,方法重载了,我们可以使用Name对外改 名字
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace IAYUIBuyService { public interface IProductService { string AYQQ(string version); string AYQQ(string ayuiversion,DateTime publishDate); void Download(string id); } }
修改代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; namespace IAYUIBuyService { [ServiceContract(Namespace="http://www.ayjs.net/wcf/2016/11/14",Name ="AYUIProductService")] public interface IProductService { [OperationContract(Name ="GetAYQQByVersion")] string AYQQ(string version); [OperationContract(Name = "GetAYQQByVersionOverloaded")] string AYQQ(string ayuiversion,DateTime publishDate); [OperationContract(IsOneWay =true,ProtectionLevel =System.Net.Security.ProtectionLevel.None)] void Download(string id); } }
在AYUIBuyService程序集里面,添加类,然后实现该接口
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IAYUIBuyService; namespace AYUIBuyService { /// <summary> /// AYUI产品购买服务 /// 2016-11-13 23:08:32 /// </summary> public class ProductService : IProductService { public string AYQQ(string version) { return "AYQQ版本为"+version; } public string AYQQ(string ayuiversion, DateTime publishDate) { return "使用版本AYUI" + ayuiversion+"的AYQQ已经发现,发布时间:"+publishDate.ToShortDateString(); } public void Download(string id) { Console.WriteLine("下载成功:("+id+")"); } } }
来吧,Host配置下,这时候,我们可以不用那个wcf配置 工具 了,自己手动粘贴,改改就行了。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="OpenMetaDataBehavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:1111/AYUIService/MEX" /> </behavior> <behavior name="OpenProductMetaDataBehavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:1111/ProductService/MEX" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="OpenMetaDataBehavior" name="AYUIBuyService.BuyService"> <endpoint address="http://localhost:1111/AYUIBuyService" binding="wsHttpBinding" bindingConfiguration="" contract="IAYUIBuyService.IBuyService" /> </service> <service behaviorConfiguration="OpenProductMetaDataBehavior" name="AYUIBuyService.ProductService"> <endpoint address="http://localhost:1111/AYUIProductService" binding="basicHttpBinding" bindingConfiguration="" contract="IAYUIBuyService.IProductService" /> </service> </services> </system.serviceModel> </configuration>
修改Program.cs
class Program { static ServiceHost AYUIBUYSERVICEHOST; static ServiceHost AYUIPRODUCTSERVICEHOST; static void Main(string[] args) { Console.WriteLine("AYUI服务启动中..."); try { AYUIBUYSERVICEHOST = new ServiceHost(typeof(BuyService)); AYUIBUYSERVICEHOST.Open(); AYUIPRODUCTSERVICEHOST = new ServiceHost(typeof(ProductService)); AYUIPRODUCTSERVICEHOST.Open(); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("服务启动成功"); Console.ReadLine(); } }
编译项目,管理员方式运行Host
然后
客户端,右键Service References文件夹,添加服务引用,一般来说,1个接口层,1个程序集的,这里我为了写demo,快一点,2个服务和实现都放到一起了。
同样高级里面,我们修改array为linkedlist
点击确定。
然后客户端使用,这里客户端无需知道服务端方法名字的,所以 客户端 只是根据元数据生成 代理的,我们从wsdl文件可以看出
客户端的服务相关配置我们也不需要配置的,如果你懂,你也不需要微软提供的,wcf配置工具的。
下节课,我们讲数据契约相关,还有 派生类的 元数据解决
====================www.ayjs.net 杨洋 wpfui.com ayui ay aaronyang=======请不要转载谢谢了。=========
推荐您阅读更多有关于“WCF,”的文章
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 消息队列解耦是骗小孩儿的
- 那天有个小孩教我WCF【3/31】
- 那天有个小孩教我WCF【1/31】
- 那天有个小孩教我WCF【3/31】
- 那天有个小孩教我WCF【2/31】
- 那天有个小孩教我WCF【1/31】
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Paradigms of Artificial Intelligence Programming
Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95
Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!