• 关于契约


    三种契约

    Service契约 包括接口和方法(operation契约)

    Data契约     参数,实体,XSD

    Message契约 SOAP中的消息格式(还有Fault契约)

    WCF异步调用,这个一定要在Client端添加Service Reference时,在高级选项中选择“生成异步调用”才生效,如下所示:

    image

    相应的Client代码:

    class Program
    {
        static int c = 0;
    
        static void Main(string[] args)
        {
            ServiceReference1.Service1Client client = new ClientConsoleApplication.ServiceReference1.Service1Client();
    
            IAsyncResult arGetData;
    
            for (int i = 0; i < 10; i++)
            {
                arGetData = client.BeginGetData(1982, GetDataCallback, client);
    
                Interlocked.Increment(ref c);
            }
    
            while (c > 0)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Waiting...Calls outstanding:{0}", c);
            }
    
            client.Close();
            Console.WriteLine("done");
    
            Console.ReadKey(true);
        }
    
        static void GetDataCallback(IAsyncResult ar)
        {
            string str = ((ServiceReference1.Service1Client)ar.AsyncState).EndGetData(ar);
    
            Console.WriteLine(c.ToString() + " : " + str);
    
            Interlocked.Decrement(ref c);
        }
    }
     

    One-Way 只发,不feedback。但是要确保Server接收成功。

    今天犯了一个低级错误,写了这么一个契约及其操作:

    public interface IService1
    {
        [OperationContract(IsOneWay = true)]
        string GetDataFast(int value);
    
        [OperationContract]
        string GetDataSlow(int value);
    }
    
    然后就不能运行了。这是因为,IsOneWay既然是只发不收的,那么它对应的方法就一定是void返回类型的。
    正确的写法是:
    public interface IService1
    {
        [OperationContract(IsOneWay = true)]
        void DoFast(int value);
    
        [OperationContract]
        void DoSlow(int value);
    }
    
    在Client调用的时候,你会发现,DoFast很快,DoSlow很慢。这是IsOneWay的作用。
    Paired One-Way是两个One-Way,而Duplex是一个。
     
     
    对于双工(Duplex),这里有一个全景图,看明白这个就够了:
    image 
     
    建议大家下载我写的游戏大厅,完全是基于WCF Duplex机制的:GamePlatform在CodePlex上正式挂牌
  • 相关阅读:
    c#中的as,is和强转
    Shader中的lerp
    [RequireComponent(typeof(....))]
    [ExecuteInEditMode]
    在ugui上显示3d物体
    T4语法快速入门
    MVC生命周期
    MVC5路由系统机制详细讲解
    FluentScheduler定时器计划任务
    MVC的WebViewPage
  • 原文地址:https://www.cnblogs.com/Jax/p/1590505.html
Copyright © 2020-2023  润新知