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

项目简介

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

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

直接添加服务引用

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

第二步、书写须要实现的功能,针对这个项目就是调用服务的方法,按要求传入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转换为对象详细能够参考博客园文章 http://www.javashuo.com/article/p-aqqbppjg-kg.html,文章中还给出一个转换Json字符串给C#类的工具,我以为很是棒。测试

生成代理类

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

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

 参考资料:

http://www.javashuo.com/article/p-unvxvutm-gb.htmlspa

http://www.javashuo.com/article/p-aqqbppjg-kg.html.net

相关文章
相关标签/搜索