0

所以我有一个服务接口(IServiceContract)及其实现(ServiceContract)

在我的客户端中,我在客户端的构造函数上创建了一个 this 的实例。

Service.ServiceContractClient objProxy; //This is the server instance
myCallbacks = new ClientBase(new InstanceContext(this));
objProxy = new Service.ServiceContractClient(new InstanceContext(myCallbacks), "1");

所以我应该能够做到objProxy.Open()每时每刻。

但是要开始通信,它是通过一个握手的线程来完成的。Handshake 是服务器中的 wcf 方法,从客户端调用。

因此,如果我从线程中执行 Open ,它会说它是错误的,而不是让我这样做

如果我把它放在里面,它会起作用,但这是不正确的,它应该是出来的。

线程只是一种让我的客户端在连接模式下休眠的机制。

    public void Connect()
    {
        objClientThread = new Thread(start) { IsBackground = true };
        objClientThread.Start();
    }

    private void start()
    {
            if (performHandshake())
            {
                IsConnected = true;
                while (IsConnected)
                {
                    System.Threading.Thread.Sleep(500);
                }
            }
     }


    private Boolean performHandshake()
    {
            objProxy.Open();
            Debug.WriteLine(String.Format("{0} is Performing handshake...", Name));
            string xmlConfig = objProxy.Handshake(Name, ModuleType, RecordTypes, Description, Version);
            Debug.WriteLine(String.Format("{0} is loading configuration...", Name));
            objConfiguration.LoadXml(xmlConfig as String);
            try
            {
                if (OnHandshakeCompleted != null)
                    OnHandshakeCompleted(this, new EventArgs());
            }
            catch
            {
                return false;
            }
            //Handshake successfull
            return true;
    }

如何将 Open 从线程中取出并使其在线程内工作(我可以调用它,但它会说它处于故障状态。

4

1 回答 1

0

我终于把start()方法和它的工作。

于 2013-08-14T13:12:29.007 回答