C# 调用WCF服务的两种方法

项目简介

之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His、Emr、Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作,方便医护人员的日常操作。具体到我们His开发商来说就是实现一个登录是调用第三方WCF接口获取第三方登录用户在His登录的用户名、密码后续可能还会包括CA信息。

之前有自己写过WCF服务给第三方调用,调用过第三方Http服务,还没有写过调用WCF服务的任务。自己写过WCF服务的经验加上网上查阅的资料,分别使用两种方法来实现C#调用WCF服务:1、直接添加服务引用;2、使用Vs 自带 SvcUtil工具生成服务代理类。使用的编辑器是VS2008,不同版本之前存在差异。

直接添加服务引用

第一步、在解决方案项目右键,选择添加服务引用。

第二步、书写需要实现的功能,针对这个项目就是调用服务的方法,按要求传入Json格式参数获取并解析返回的Json格式出参,然后利用出参去实现自己需要实现的功能。

完成上一步以后,就可以开始书写代码来实现自己需要实现的功能了,实际上添加服务引用的使用,VS会自动替你在添加服务引用的解决方案项目对应的配置文件app.config添加服务绑定、终结点等配置信息。如果你在添加服务引用的项目下面书写实现功能部分的代码,则不需要管配置文件,如果你的启动项目不是添加服务引用的项目,那么你需要在启动项目的配置文件部分增加VS编辑器自动添加的配置文件内容,我把自动生成部分的内容展示给大家看看,因为这是我实际开发环境下引用的项目,所以我会对路径部分进行处理,端口号是可选的,有的服务使用的默认端口号。针对服务绑定、终结点可以参考博客:https://blog.csdn.net/zhang_xinxiu/article/details/41329511

 

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ISSOService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://路径[:端口号]/SSOService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISSOService"
                contract="SSOService.ISSOService" name="BasicHttpBinding_ISSOService" />
        </client>
    </system.serviceModel>

 

public class SingleSignOnParam
    {
        public static SingleSignOnOut GetSingleSignOnOut()
        {
            //实例化服务客户端对象
            SSOServiceClient client = new SSOServiceClient();
            //Json序列化对象实例
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            //获取机器Mac地址
            string StrMac = DbTool.GetMac();
            //构建入参对象
            SingleSignOnIn singleSignIn = new SingleSignOnIn() { appid = "34", keyword = StrMac.Replace("-","") };
            string jsonStr = string.Empty;
            //序列化得到Json格式入参字符串
            jsonStr = serializer.Serialize(singleSignIn);
            //调用服务方法得到出参字符串
            string StrOut = client.GetDataExchange(jsonStr);
            try
            {
                //解析出参字符串得到实例
                JsonOutPara para = serializer.Deserialize<JsonOutPara>(StrOut);
                if(para.Code=="1")
                    //需要使用的信息存储在JsonOutPara对象的Result字段中,对字段内的Json格式字符串再次进行解析
                    return serializer.Deserialize<SingleSignOnOut>(para.Result); 
            }
            catch (Exception)
            {
                
                throw;
            }
            return null;
        }
    }
    public class SingleSignOnIn
    {
        public string appid { get; set; }
        public string keyword { get; set; }
    }
    public class JsonOutPara
    {
        public string Code { get; set; }
        public string Message { get; set; }
        public string Result { get; set; }
    }
    public class SingleSignOnOut
    {
        public string menuid { get; set; }
        public string menuname { get; set; }
        public string appid { get; set; }
        public string appname { get; set; }
        public string apptype { get; set; }
    }

 我对代码进行了简单的注释,不明白的地方可以回复我,然后进行沟通。这里面主要是入参和出参都是Json格式的字符串,我这里使用.Net自带的System.Web.Extensions程序集,在使用时需先在项目上添加引用然后在代码前面添加命名空间,代码如下:using System.Web.Script.Serialization;对于Json转换为对象详细可以参考博客园文章 https://www.cnblogs.com/zxtceq/p/6610214.html,文章中还给出一个转换Json字符串给C#类的工具,我觉得非常棒。

生成代理类

生成代理类的方式相对于第一种方式具有一定的优势:不需要添加服务引用,但是配置文件的内容还是需要添加的,但一旦服务有所更新,就必须重新生成新的代理类并进行替换,我这里使用Vs2008自带的SvcUtil工具,启动程序后输入命令: svcutil.exe http://路径[:端口]/SSOService.svc?wsdl

接下来在对应的目录下面找到代理类文件和配置文件,将配置文件的内容粘贴到实际启动的项目的配置文件中。我在单独一个程序里面进行了该方法的测试,实际效果跟直接添加服务引用一致。打开支付宝首页搜索“524252978”,即可领红包。

 参考资料:

https://www.cnblogs.com/pnljs/p/3765892.html

https://www.cnblogs.com/zxtceq/p/6610214.html

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
WCF全面解析(套装上下册)》由蒋金楠所著,是作者多年潜心研究WCF技术的心血之作,也是这些年来从事WCF开发的经验总结。书如其名,此书涵盖了WCF几乎所有的知识点,并对其底层框架进行了“庖丁解牛”式的剖析,力求将WCF的整个运行机制完整而清晰地呈现在读者面前。 《WCF全面解析(套装上下册)》上册的前四章在对WCF进行总体介绍的基础上,对构成终结点的三要素(地址、绑定和契约)进行了系统说明;随后的两章则着重剖析序列化和消息编码在WCF中的实现;第7、8章讲述了在服务寄宿和操作调用过程中,WCF服务端和客户端框架分别为我们做了什么;第9、10章将介绍的重点落在实例化、会话和REST服务上面;在最后一章中采用WCF构建了一个具体的电子商务网站VM,它将指导你如何将理论应用于实践。 《WCF全面解析(套装上下册)》的下册主要涉及一些所谓的“高级”话题,主要包括如何在分布式环境中处理异常(第1章);元数据的导入与导出、发布与获取如何实现(第2章);如何利用WCF对事务的支持将分布式事务引入服务(第3章);如何利用并发与限流机制提高服务的吞吐量和可用性(第4章);如何利用可靠会话机制确保消息的“使命必达”(第5章);如何利用队列服务提供离线通信的支持(第6章);第7、8章主要涉及安全的相关内容,包括传输安全、授权与审核;第9章全景展示WCF服务端和客户端的运行时框架,以及在此基础上的所有扩展可能;最后一章为你带来WCF4.0几个独立的新特性。 编辑推荐 《WCF全面解析(套装上下册)》不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员使用,同样也适合对WCF有一定了解的开发设计人员和架构师阅读。相信不同层次的读者都能从此书中找到自己希望了解的部分。 《WCF全面解析(套装上下册)》的内容不仅适合尚未接触过WCF,希望尽快入门并进行深入研究的开发人员,同样适合对WCF具有一定了解的开发设计人员和架构师。相信不同层次的读者都能从本书中找到自己希望了解的部分。阅读本书的读者需要对.NET,包括对C#和.NET Framework具有一定的了解。如果读者具备了DCOM、Enterprise Library Service、.NET Remoting、Web Service、MSMQ及SOA相关的基础,对阅读此书尽快掌握WCF将大有裨益。 名人推荐我经历了COM时代,一直把Don Box的《COMM本质论》奉为我的指路明灯。能把SOA机理和WCF这种特定厂商实现的技术讲得如《COM本质论》一样完美透彻的,那必属Artech这本经过自己深研、实践而著的心血结晶——《WCF全面解析》。如果你想成为SOA和WCF方面的专家,那么这本书就是你的最好法宝。想想你作为专家而获得的回报,那么你对这本书购买所付出的,简直是太值了。 ——《走出软件作坊》 作者 明源软件CTO 阿朱 首先,金楠是—位工作在一线的优秀的WCF技术人员,这符合我对阅读技术图书的第一个要求和期待。其次,金楠的写作文笔、专业责任也给人以充分信任,这在金楠的文字中读者可以体会。这本《WCF全面解析》全面剖析了构建WCF应用所需要的各方面技术,剥丝抽茧,由浅入深,也是我非常欣赏的技术讲述方式。我相信《WCF全面解析》—书是搞WCF朋友的案头必备。 ——祝成科技与Boolan.com创始人.NET技术专家 李建忠 知识全面、论述准确、逻辑严密是本书的特点。这是一本各层次开发人员都可以从中受益的书:对于初、中级开发人员,它可以帮助你获得WCF全方位的知识,系统地梳理WCF的知识结构,提升动手实践能力;对于高级开发人员,它既可以有效弥补你WCF相关知识中的盲点,又可以让你在自己熟悉的知识点上领略作者的看法和理解。 ——资深架构师 曲春雨 作者简介蒋金楠,网名Artech,现就职于某知名软件公司担任高级软件顾问。连续5届微软MVP(最有价值专家),同时也是少数的双料MVP(Solutions Architecture+Connected System)之一。国内较早接触WCF的人之一,2007年2月起在个人博客(http://www.cnblogs.com/artech)上发表超过两百篇深入介绍WCF的文章,成为了目前国内WCF在线资料的主要来源。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值