服务器打开时,WCF Winform会冻结

时间:2017-09-08 15:08:47

标签: wcf ipc named-pipes servicehost

我编写了一个VSTO Outlook加载项,并且当用户按下加载项上的按钮并传递一个整数作为参数时,我试图在单独的Winform应用程序中打开一个表单。我正在使用WCF命名管道绑定。加载项是客户端,Winform应用程序是服务器。绑定和进程间通信工作正常。但是,当目标表单打开时,它会通过旋转光标冻结。否则表单在Winform应用程序中可以正常工作。

根据下面的代码,当我调用“clsActivity.EditT(”“,activityID);”在服务器方法中,它打开一个正确创建和显示的表单,但随后使用旋转光标锁定并且无法访问。我一直在假设servicehost或其他WCF进程中有一些元素未完成,但无法识别问题。

我花了几天时间试图找到答案。由于我对WCF很新,我甚至不确定我是否在问正确的问题。任何帮助将不胜感激。感谢。

服务器

// Service Contract
[ServiceContract(Namespace = "ComsIPC")]
interface ComsIPCContract
{
    [OperationContract(IsOneWay = true)]
    void OpenActivity(int activityID);
}

// Server Implementation
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ComsIPCServer : ComsIPCContract
{
    public void OpenActivity(int activityID)
    {
        try
        {
            clsActivity.EditT("", activityID);
        }
        catch
        {
            MessageBox.Show("Error in ComsIPCServer");
        }
    }

    public void CreateComsIPCServerHost()
    {
        string address = "net.pipe://localhost/coms/IPC";

        ServiceHost serviceHost = new ServiceHost(typeof(ComsIPCServer));
        NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
        serviceHost.AddServiceEndpoint(typeof(ComsIPCContract), binding, address);
        serviceHost.Open();
    }
}

客户端

// Service Contract
[ServiceContract(Namespace = "ComsIPC")]
interface ComsIPCContract
{
    [OperationContract(IsOneWay = true)]
    void OpenActivity(int activityID);
}

public class ComsIPCClient
{
    public void OpenActivityInComs(int activityID)
    {
        string address = "net.pipe://localhost/coms/IPC";

        NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
        EndpointAddress ep = new EndpointAddress(address);
        ComsIPCContract channel = ChannelFactory<ComsIPCContract>.CreateChannel(binding, ep);

        channel.OpenActivity(activityID);
    }
}

0 个答案:

没有答案