我对 WCF NetNamedPipeBinding 有疑问。当我在 Windows XP 机器上通过 Visual Studio 2008 运行我的服务器和客户端代码时,一切正常。但是,一旦我将服务器部署为 Windows 服务并在 Windows Server 2008 中安装我的客户端应用程序,每当我尝试使用任何合同方法时,我都会在客户端收到 TimeoutException。看来我可以成功创建客户端并打开它,但无法调用任何方法。
服务初始化代码:
Uri baseAddress = new Uri("http://localhost:8500/xNet/xNetService");
string address = "net.pipe://localhost/xNet/xNetService";
_xNetAPIServiceHost = new ServiceHost(typeof(xNetService), baseAddress);
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
_xNetAPIServiceHost.AddServiceEndpoint(typeof(IServiceAPI), binding, address);
// Add a mex endpoint
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8501/xNet/xNetService/mex");
_xNetAPIServiceHost.Description.Behaviors.Add(smb);
_xNetAPIServiceHost.Open();
客户端初始化代码:
string address = "net.pipe://localhost/xNet/xNetService";
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
_serviceClient = new ServiceAPIClient(binding, new EndpointAddress(address));
_serviceClient.Open();
Windows 服务作为“本地系统帐户”运行。我不知道问题出在哪里。不知道是不是安全账户的问题,还是命名管道是否打开了?我假设因为我可以成功创建并打开客户端,所以它至少会找到命名管道。如果没有 TimeoutException,我就无法调用任何服务方法。