首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Server2008上的WCF NetNamedPipeBinding TimeoutException

Windows Server2008上的WCF NetNamedPipeBinding TimeoutException
EN

Stack Overflow用户
提问于 2011-12-15 16:51:50
回答 1查看 731关注 0票数 1

我有一个WCF NetNamedPipeBinding的问题。当我在Windows XP机器上通过Visual Studio2008运行我的服务器和客户端代码时,一切工作正常。但是,一旦我将我的服务器部署为Windows Service,并在Windows Server2008中安装我的客户端应用程序,每当我尝试使用任何合同方法时,都会在客户端得到一个TimeoutException。看起来我可以成功地创建客户端并打开它,但是不能调用任何方法。

服务初始化代码:

代码语言:javascript
复制
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();

客户端初始化代码:

代码语言:javascript
复制
string address = "net.pipe://localhost/xNet/xNetService";

NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);

_serviceClient = new ServiceAPIClient(binding, new EndpointAddress(address));
_serviceClient.Open();

Windows服务以“本地系统帐户”运行。我不知道问题出在哪里。我不知道是否存在安全帐户问题,或者命名管道是否已打开?我假设既然我可以成功地创建并打开客户端,那么它看起来至少找到了命名管道。如果没有TimeoutException,我就不能调用任何服务方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-20 14:54:54

在尝试了各种绑定并回到基础知识之后,我注意到示例程序可以工作,但我的程序不能工作,除非我使用Visual Studio进行调试。在这一点上,我决定这一定是我自己的代码正在发生的事情。为了简化调试,我关闭了绑定中的所有安全性。

我开始注释掉我的服务的OnStart方法中的大多数语句,以便确定可能发生的事情。我注释掉了除了初始化ServiceHost的代码之外的所有内容。神奇的是,我的客户端现在可以成功地与服务进行通信。然后,我开始取消注释OnStart方法中的每一行代码,直到我的客户突然开始再次给我一个TimeoutException。

我的服务类,比如"MyAPI",实现了契约"IMyAPI“。除了使用"MyAPI“类作为WCF服务之外,我还在服务内部使用了"MyAPI”类的一个实例来做各种事情(“内部”方法)。在我的OnStart方法中,我首先创建了"MyAPI“类的一个实例,然后创建了ServiceHost:

代码语言:javascript
复制
MyAPI API = new MyAPI();

ServiceHost service = new ServiceHost(typeof(MyAPI));

我没有收到任何错误或异常,所以看起来一切正常,但实际上我无法使用客户端连接到服务。一旦我更改了上述语句的顺序,客户端就再次开始工作:

代码语言:javascript
复制
ServiceHost service = new ServiceHost(typeof(MyAPI));

MyAPI API = new MyAPI();

我不确定为什么会发生这种情况,我只知道我可以在内部使用我的API,并将其作为服务使用,而不会出现任何客户端连接问题。也许有人会提供一些关于这背后的原因,或者可能我的代码没有正确设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8517387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档