zoukankan      html  css  js  c++  java
  • WCF笔记

    1.调用方法实现时,必须实现原有接口。必须使用[ServiceContract]进行修饰,否则在客户端无法调用该方法。

    using System.ServiceModel;
     
    namespace WCFService
    {
        [ServiceContract]
        public interface IUser
        {
            [OperationContract]
            string ShowName(string name);
        }
    }
     
     
    namespace WCFService
    {
        public class User : IUser
        {
            public string ShowName(string name)
            {
                string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
                return wcfName;
            }
        }
    }


    2.大部分方法都是等待WCF服务端方法运行过后才运行客户端方法。加[OperationControact(IsOneWay=true)],方法中不可有参数回传,使用void调用,则可以实现单向调用。

    3.双工服务调用
    wcf服务接口定义
    namespace WcfServiceLibrary2
    {        [ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples",SessionModel=Session.Required,CallbackContract=type(iCalcalatorDeplexCallback))]
            public interfact iCalcalatorDuplex
            {
                [OperationContract(IsOneWay=true)]
                voide clear();
                [OperationContract(IsOneWay=true)]
                void AddTo(double n);
                [OperationContract(IsOneWay=true)]
                void SubtractFrom(double n);
                [OperationContract(IsOneWay=true)]
                void MultiplyBy(double n);
                [OperationContract(IsOneWay=true)]
                void DivideBy(double n);
            }

            public interfact iCalculatorDuplexCallback
            {
                [OperationContract(IsOneWay=true)]
                void Equals(double result);
                [OperationContract(IsOneWay=true)]
                void Equation(string eqn);
            }
    }

    wcf实现类
    namespace WcfServiceLibrary2
    {
        [ServiceBehavior(instanceContextMode=InstanceContextMode.PerSession)]
        public class CalcalatorService:ICalculatorDuplex
        {
            double result;
            string equation;
             iCalculatorDuplexCallback callback=null;

            public CalcalatorService()
            {
                result=0.00;
                equation-result.ToString();
                callback=OperationContext.Current.GetCallbackChannel<iCalculatorDuplexCallback>();         
            }
            
            public void Add(double n)
            {
                result += n;
                equation += " + " + n.ToString();
                callback.eQuals(result);
            }

        }
    }

    wcf配置文件中,<endpoint address="" binding="HttpBinding" contract="WcfServiceLibrary2.IService1">更新为<endpoint address="" binding="wsDualHttpBinding" contract="WcfServiceLibrary2.IService1">
    因为默认的不支持回调。


    wcf客户端
    using ConsoleApplication1.ServiceReferencel;
    namespace ConsoleApplication1
    {
        public class CallbackHandler:iCalcalatorDuplexCallback
        {
            public void Equals(double result)
            {
                controle.writeline("Result({0})",result);        
            }
        
            public void Equation(string eqn)
            {
                controle.writeline("Equation({0})",eqn);
            }
        }

        class Program
        {
            static void Main(string{} args)
            {
                InstanceContext instanceContext=new InstanceContext(New CallbackHandler());
                serviceREferencel.CalculatorDuplexClient client=new serviceREferencel.CalculatorDuplexClient(instanceContext);

                cllient.Add(100);
                 
            }
        }
    }

    完整代码下载http://download.microsoft.com/download/E/6/B/E6BA149D-C76D-46D4-9284-97DD729986DD/WebCast20090120pm_Demo.zip



    Wcf配置文件
    <System.ServiceModel>
    <services>----服务和终结点
        <service>
            <endpoint/>
        </service>
    </services>
    <bindings>-----绑定(可选)
        <binding>
        </binding>
    </bindings>
    <behaviors>-----行为(可选)
        <behavior>
        </behavior>
    </behaviors>
    </System.ServiceModel>

    【Service】元素,每个都具有以下属性
    name,指定提供服务协定的实现的类型。这是完全限定名称(命名空间和类型名称)
    behaviorConfiguration,指定一个在behaviors元素中找到的behavior元素的名称,指定的行为控制操作,例如服务是否允许模拟。

    【endpoint】元素,每个节点都需要以下属性表示的地址、绑定和协定
    address,指定服务的统一资源标识符(URI),它可以是一个绝对地址,或是一个相对于服务基址给定的地址。如果设置为空字符串,则指定示在创建服务的ServiceHost时,终结点在指定的基址上可用。
    binding,通常,指定一个类似WsHttpBinding的系统提供的绑定,但也可以指定一个用户定义的绑定,指定的绑定确定传输协议类型、安全和使用的编码,以及是否支持或启用可靠会话、事务或流。
    bindingConfiguration,如果必须修改绑定的默认值,则可通过在bindings放弃各学科配置相应的binding元素来执行此操作。此属性应赋予与用于更改默认值的binding元素的name属性相同的值。
    contract,指定定义协定的接口。这是由Service元素的name属性指定的公共语言运行库(CLR)类型中实现的接口。

    【binding】元素,

    【behaviors】元素
    <behaviors>
        
    </behaviors> 
  • 相关阅读:
    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
    trim思考
    国王验毒酒问题
    有人在群里问mysql如何选择性更新部分条件的问题
    有人在群里问 20180222055怎么转20180222-055 这样的问题
    如何下载腾讯视频的视频转为MP4常用格式视频
    天气预报的大雪真的下了
    群友面试的问题 我搞笑的帮忙回答一下
    电台大神打油诗
    ajax简单手写了一个猜拳游戏
  • 原文地址:https://www.cnblogs.com/weschen/p/6264624.html
Copyright © 2011-2022 走看看