WCF笔记

Posted WesChan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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> 

以上是关于WCF笔记的主要内容,如果未能解决你的问题,请参考以下文章

WCF 配置

WCF系列教程之WCF服务宿主

WCF系列教程之WCF实例化

NetFramework各个版本的特性笔记

WCF再学习小结

WCF系列教程之WCF客户端异常处理