happyman0207 2015-01-09 00:47 采纳率: 0%
浏览 3947

C#调用Thrift出现Thrift.TApplicationException

最近用C#客户端调用Curator RPC Proxy服务,远程与zookeeper通信。客户端与RPC Proxy之间通信用Thrift,Thrift文件是从官网下载且能正常编译使用。
实现以下两个功能:
(1)监听zookeeper中特定node事件,包括增、删、改等信息;
图片说明
(2)从客户端按下按钮,增加一个新node。
图片说明

现在第一个功能已正常实现,第二个在铵下后出现如下错误,且界面死机。
图片说明

自己添加的所有代码如下:

public partial class Form1 : Form
    {
        //CuratorService 
        CuratorService.Client   curatorService = null;

        EventService.Client eventService = null;

        CuratorProjection curatorProjection = null;

        CuratorProjection projection2 = null;


        //TTransport type
        TTransport transport = null;

        TProtocol protocol = null;

        //Thread operation function
        public static void eventCycle( object obj, object obj2, object obj3){

            CuratorProjection projection = (CuratorProjection)obj;
            EventService.Client eventService = (EventService.Client)obj2;
            CuratorService.Client curatorService = (CuratorService.Client)obj3;

            PathChildrenCacheProjection cacheProjection = curatorService.startPathChildrenCache(
                projection,
                "/root",
                true,
                false,
                PathChildrenCacheStartMode.BUILD_INITIAL_CACHE
                );

            while(Thread.CurrentThread.IsAlive){

                try
                {

                    CuratorEvent remoteEvent = eventService.getNextEvent(projection);

                    if (CuratorEventType.PING == remoteEvent.Type)
                    {
                        Console.WriteLine("Heartbeat");
                    }

                    else if (CuratorEventType.PATH_CHILDREN_CACHE == remoteEvent.Type)
                    {
                        if (PathChildrenCacheEventType.CHILD_ADDED == remoteEvent.ChildrenCacheEvent.Type)
                        {

                            ChildData child = remoteEvent.ChildrenCacheEvent.Data;
                            String path = child.Path;

                            Console.WriteLine("Children Added    " + path);
                        }

                        else if (PathChildrenCacheEventType.CHILD_REMOVED == remoteEvent.ChildrenCacheEvent.Type)
                        {

                            ChildData child = remoteEvent.ChildrenCacheEvent.Data;
                            String path = child.Path;

                            Console.WriteLine("Child Deleted:  " + path);
                        }
                    }

                }catch( TTransportException transError)
                {
                    Console.WriteLine( transError.Data );
                }catch( TException tError )
                {
                    if( tError is TApplicationException )

                    Console.WriteLine(tError.Data);
                }                  

            }
        }

        public Form1()
        {
            InitializeComponent();

            transport = new TSocket( "127.0.0.1", 1234 );
            transport.Open();

            protocol = new TBinaryProtocol( transport );


            curatorService = new CuratorService.Client( protocol );

            eventService = new EventService.Client( protocol );

            curatorProjection = curatorService.newCuratorProjection("main");

            projection2 = curatorService.newCuratorProjection("main");


            Thread eventListener = new Thread(delegate() { eventCycle(curatorProjection, eventService, curatorService); });
            eventListener.Start();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                CreateSpec node = new CreateSpec();
                node.Path = "/root/xm";
                node.Data = Encoding.Default.GetBytes("XM");
                node.Mode = CreateMode.PERSISTENT_SEQUENTIAL;
                node.CreatingParentsIfNeeded = true;

                OptionalPath path = curatorService.createNode( projection2, node );
                if(null != path)
                Console.WriteLine( path.ToString() );

            }catch( TTransportException error){

                Console.WriteLine( error.Data );
            }catch( TApplicationException tError){

                Console.WriteLine( tError.Data );
            }

        }
    }

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块
  • ¥15 nhanes加权logistic回归,svyglm函数