我编写了一个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);
}
}