Esempio n. 1
0
        public ServiceEventSource SetAlarmTime(AlarmClockParameter para)
        {
            this.MaxAlarmCount = para.AlarmCount;
            this.AlarmTime     = para.AlarmTime;
            return(new ServiceEventSource(timer, 2, () =>
            {
                //要初始化执行的代码或者方法
                AlarmCount = 0;
                timer.Start();
                //如果上面的代码是一个执行时间比较长的方法,但又不知道何时执行完成,
                //并且不想等待超时回收服务对象,而是在执行完成后立即回收服务对象,可以调用下面的代码:
                //CurrentContext.PublishEventSource.DeActive();
                //注意:调用DeActive 方法后将会停止事件推送,所以请注意此方法调用的时机。

                //下面代码仅做测试,查看服务事件源对象的活动生命周期
                //在 ActiveLife 时间之后,一直没有事件推送,则事件源对象被视为非活动状态,发布工作线程会被回收。
                //在本例中,ActiveLife 为ServiceEventSource 构造函数的第二个参数,值为 2分钟,可以通过下面一行代码证实:
                int life = base.CurrentContext.PublishEventSource.ActiveLife;

                //如果上面执行的是一个执行时间比较长的方法,并且有返回值,想将返回值也推送给订阅端,可以再次执行CurrentContext.PublishData
                //CurrentContext.PublishData(DateTime.Now);

                //如果事件推送结束,需要设置事件源为非活动状态,否则,需要等待 ActiveLife 时间之后自然过期成为非活动状态。
                //如果你无法确定事件推送何时结束,请不要调用下面的方法
                //CurrentContext.PublishEventSource.DeActive();
            }));
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("******** PDF.NET MSF 客户端测试程序 *********");
            Console.WriteLine();
            Proxy client = new Proxy();

            client.ErrorMessage += client_ErrorMessage;
            Console.Write("请输入服务器的主机名或者IP地址(默认 127.0.0.1):");
            string host = Console.ReadLine();

            if (string.IsNullOrEmpty(host))
            {
                host = "127.0.0.1";
            }
            Console.WriteLine("服务地址:{0}", host);

            Console.Write("请输入服务的端口号(默认 8888):");
            string port = Console.ReadLine();

            if (string.IsNullOrEmpty(port))
            {
                port = "8888";
            }
            Console.WriteLine("服务端口号:{0}", port);

            client.ServiceBaseUri = string.Format("net.tcp://{0}:{1}", host, port);
            Console.WriteLine("当前客户端代理的服务基础地址是:{0}", client.ServiceBaseUri);
            Console.WriteLine();
            Console.WriteLine("MSF 请求-响应 模式调用示例:");

            client.RequestService <string>("Service://Service1/SayHello/System.String=bluedoctor1",
                                           PWMIS.EnterpriseFramework.Common.DataType.Text,
                                           s =>
            {
                Console.WriteLine("1,Server Response:【{0}】", s);
            });

            ServiceRequest request = new ServiceRequest();

            request.ServiceName = "Service1";
            request.MethodName  = "SayHello";
            request.Parameters  = new object[] { "bluedoctor23" };
            client.RequestService <string>(request,
                                           PWMIS.EnterpriseFramework.Common.DataType.Text,
                                           s =>
            {
                Console.WriteLine("2,Server Response:【{0}】", s);
            });

            string serverMsg = client.RequestServiceAsync <string>(request).Result;

            Console.WriteLine("3,Server Response:【{0}】", serverMsg);

            client.RequestService <MailMessage>("Service://Service1/GetMailMessage/System.String=bluedoctor4",
                                                PWMIS.EnterpriseFramework.Common.DataType.Json,
                                                mail =>
            {
                Console.WriteLine("4,Server Response:【{0}】,\r\n Revovery Time:{1}", mail.Message, mail.RevoveryTime);
            });

            ServiceRequest request2 = new ServiceRequest();

            request2.ServiceName = "Service1";
            request2.MethodName  = "GetMailMessage";
            request2.Parameters  = new object[] { "bluedoctor567" };

            client.RequestService <MailMessage>(request2,
                                                PWMIS.EnterpriseFramework.Common.DataType.Json,
                                                mail =>
            {
                Console.WriteLine("5,Server Response:【{0}】,\r\n Revovery Time:{1}", mail.Message, mail.RevoveryTime);
            });

            client.RequestService <MailMessage2>(request2,
                                                 PWMIS.EnterpriseFramework.Common.DataType.Json,
                                                 mail =>
            {
                Console.WriteLine("6,Server Response:【{0}】,\r\n Revovery Time:{1}", mail.Message, mail.RevoveryTime);
            });

            MailMessage mail2 = client.RequestServiceAsync <MailMessage>(request2).Result;

            Console.WriteLine("7,Server Response:【{0}】,\r\n Revovery Time:{1}", mail2.Message, mail2.RevoveryTime);



            DateTime serverTime = client.RequestServiceAsync <DateTime>("Service://TestTimeService/ServerTime/",
                                                                        PWMIS.EnterpriseFramework.Common.DataType.DateTime).Result;

            Console.WriteLine("MSF Get Server Time:{0}", serverTime);



            Console.WriteLine("按回车键继续");
            Console.ReadLine();


            Console.WriteLine();
            Console.WriteLine("MSF 发布-订阅 模式调用示例:");
            Console.WriteLine("--1,测试服务端多任务--------");

            ServiceRequest reqTask = new ServiceRequest();

            reqTask.ServiceName = "TestTimeService";
            reqTask.MethodName  = "TestTask";
            client.Subscribe <string>(reqTask, PWMIS.EnterpriseFramework.Common.DataType.Text, s => {
                if (s.Succeed)
                {
                    Console.WriteLine("Server Message:{0}", s.Result);
                }
                else
                {
                    Console.WriteLine("Server Error:{0}", s.ErrorMessage);
                }
            });
            Console.WriteLine("按回车键继续");
            Console.ReadLine();

            Console.WriteLine("--2,测试服务端事件(分布式事件)--------");

            ServiceRequest request3 = new ServiceRequest();

            request3.ServiceName = "TestTimeService";
            request3.MethodName  = "ServerTime";
            int count = 0;

            client.Subscribe <DateTime>(request3,
                                        PWMIS.EnterpriseFramework.Common.DataType.DateTime,
                                        s =>
            {
                if (s.Succeed)
                {
                    Console.WriteLine("MSF Server Time:{0}", s.Result);
                }
                else
                {
                    Console.WriteLine("MSF Server Error:{0}", s.ErrorMessage);
                }
                count++;
                if (count > 10)
                {
                    client.Close();
                    Console.WriteLine("订阅【服务器时钟服务】结束。按回车键继续。");
                }
            });

            Console.ReadLine();
            DateTime alarmTime;
            string   strTime;

            do
            {
                Console.Write("请输入闹铃响铃时间(示例输入格式 {0}) >>", DateTime.Now.ToShortTimeString());
                strTime = Console.ReadLine();
            }while (!DateTime.TryParse(strTime, out alarmTime));


            Console.WriteLine("订阅闹钟服务,闹钟将在 {0} 响铃...", strTime);
            AlarmClockParameter acp = new AlarmClockParameter();

            acp.AlarmCount = 10;
            acp.AlarmTime  = alarmTime;

            ServiceRequest request4 = new ServiceRequest();

            request4.ServiceName = "AlarmClockService";
            request4.MethodName  = "SetAlarmTime";
            request4.Parameters  = new object[] { acp };

            client.Subscribe <DateTime>(request4,
                                        PWMIS.EnterpriseFramework.Common.DataType.DateTime,
                                        s =>
            {
                if (s.Succeed)
                {
                    Console.WriteLine("闹钟响了,现在时间:{0}", s.Result);
                    if (s.Result == new DateTime(1900, 1, 1))
                    {
                        client.Close();
                        Console.WriteLine("闹铃服务结束,按回车键继续。");
                    }
                }
                else
                {
                    Console.WriteLine("MSF Server Error:{0}", s.ErrorMessage);
                    client.Close();
                }
            });

            Console.ReadLine();


            string repMsg = "你好!";

            client.SubscribeTextMessage("我是客户端", serverMessage => {
                Console.WriteLine();
                Console.WriteLine("[来自服务器的消息]::{0}", serverMessage);
            });

            while (repMsg != "")
            {
                Console.Write("回复服务器(输入为空,则退出):>>");
                repMsg = Console.ReadLine();
                client.SendTextMessage(repMsg);
            }

            Console.WriteLine("测试完成,退出");
        }