zoukankan      html  css  js  c++  java
  • 关于契约

    三种契约

    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上正式挂牌
  • 相关阅读:
    PAT甲级——A1006 Sign In and Sign Out
    PAT甲级——A1005 Spell It Right
    左神算法书籍《程序员代码面试指南》——1_05用一个栈实现另一个栈的排序
    左神算法书籍《程序员代码面试指南》——1_03如何使用递归函数和栈操作逆序一个栈
    PAT甲级——A1004 Counting Leaves
    PAT甲级——A1003Emergency
    Dijkstra算法
    PAT甲级——A1002 A+B for Polynomials
    PAT甲级——A1001A+BFormat
    Oil Deposits UVA
  • 原文地址:https://www.cnblogs.com/Jax/p/1590505.html
Copyright © 2011-2022 走看看