问题标签 [netnamedpipebinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
490 浏览

c# - NetNamedPipeBinding:管道方法中的参数为空

我有一个在 NetNamedPipeBinding 端点上侦听的 ServiceHost。我有一个服务合同类,它有一个方法,由客户端调用并由服务器处理。该方法(我们称之为 PipeRequest())有一个 Request 参数。在客户端,我填充了这个对象,但是当它被发送到服务器时它是空的。任何想法为什么会这样?

0 投票
2 回答
19509 浏览

wcf - 没有端点监听 net.pipe 异常

我有许多 WCF 服务,我需要从另一个服务调用一个服务。我决定netNamedPipeBinding为此目的使用。

我的 web.config 文件看起来像这样。(我没有在这里复制无关的东西。)

web.config 文件中的客户端部分如下所示:

我正在尝试OperationContract像这样调用其中一个(GetDetails):

当我执行这段代码时,我在调用 OperationContract GetDetails 的那一行得到了异常:

在 net.pipe://localhost/TestSite/AuthorizationService.svc 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。

我无法找出确切的问题。也没有 InnerException。我使用的是Windows7机器,IIS版本是IIS7.5。请注意,我可以毫无问题地从我的 Winform 应用程序调用此服务。net.pipe 绑定被添加到 IIS 中的网站绑定中。

如何使用 net.pipe 传输确保服务正常工作?如果是 HTTP,我们可以在 IE 中浏览并确保它。

0 投票
2 回答
737 浏览

c# - WCF 和 NetNamedPipeBinding - AVG Antivirus

我们不断有一些客户从 AVG Antivirus 收到有关我们应用程序的警告。

我们的应用程序使用 C# 中的 WCF 打开一个标准的 NetNamedPipeBinding,仅用于跨进程通信。

这是我们可以通过某种方式解决的问题吗?我想知道我们是否需要设置一些东西来指示 WCF 服务仅在机器本地。

现在我们只需在 C# 中设置绑定,如下所示:

我没有看到其他重要的设置,我们只是ServiceHost.AddServiceEndpoint用“net.pipe://localhost/OurEndpoint”之类的地址调用来设置绑定。

我想告诉我们的客户,AVG 是垃圾——他们最好在软盘驱动器中放一只兔子的脚,但我的良心不会让我这样做。

0 投票
2 回答
1020 浏览

c# - Internal communication between a service and multiple user applications WCF C#

I'm currently working on a project in c# where I have a service running as LocalSystem, and a user application (tray app) running for each logged on user.

I need to have communications between the two. Initially I've set up an endpoint using NetTcpBinding on the service for the clients to connect to and supply their username. Thereafter the clients each set up an endpoint themselves as such; net.tcp://localhost:5001/UserApp/'username', with port sharing enabled. The service can then connect to that endpoint, knowing the username.

Though, when trying to get the program to work well with UAC I ran into some issues. Port sharing with UAC enabled requires the user to be registred in <'allowAccounts> of SMSvcHost.exe.config, and even though I've added the user, I still get the following errror when trying to register the endpoint;

The service endpoint failed to listen on the URI 'net.tcp://localhost:5001/UserApp/myuser' because access was denied. Verify that the current user is granted access in the appropriate allowAccounts section of SMSvcHost.exe.config.

I've also tried switching to NetNamedPipeBinding, which works well when hosting the user application. But when using this binding the service can not access the endpoints opened by the clients.

So, basically I need a way for a single service to provide an endpoint for multiple user applications on the same machine, and the service to be able to connect to and send event updates to multiple user applications.

Any suggestions?

0 投票
1 回答
2899 浏览

.net - 什么可能导致 WCF NamedPipe 通道出现故障(在服务器端?)

如果这看起来有点基本,我深表歉意,但我是 WCF 的新手 - 也是一般的进程间通信。

我的设置的详细信息

我在我的 WCF“服务器”中使用 NetNamedPipeBinding,它是作为 Windows 服务运行的应用程序的一部分。

我有两个使用由 DuplexChannelFactory 创建的通道与 WCF 服务器通信的客户端。一个是 ASP.Net MVC 3 Web 应用程序,它为每个页面请求创建一个通道(然后关闭它**)。另一个是 WPF 应用程序(用作服务的一种监视控制台/诊断工具)。

一切都运行良好 - 通常持续一周或更长时间 - 有很多人访问 Web 应用程序,但偶尔会在 WCF“服务器”内部出现问题,并且客户端开始报告异常“通信对象 System.ServiceModel.Channels。 ServiceChannel,不能用于通信,因为它处于故障状态”,每当他们尝试创建通道代理时。

一旦服务器“出现故障”,每次连接尝试都会导致该错误。甚至控制台应用程序的新实例也会报告它。这让我相信这不是“客户端”端的问题。

** 注意:我认为每个页面请求都会关闭频道。它被实例化为 MVC 控制器的成员,据我所知,它超出了范围,并在请求结束时被处理。也许我错了?

问题:

有没有人对在哪里查看有任何建议 - 甚至我如何能够在我的测试环境中重现这个问题。

这种东西能彻底消除吗?或者我应该求助于“服务器”内部的一个线程,它每隔几分钟尝试连接到命名管道服务并在失败时重新启动服务?

附加信息

包含我正在使用的代码(在 WCF“服务器”中)以侦听命名管道上的请求可能会有所帮助

更多问题

假设我正确理解每个 NamedPipe“通道”实际上与 TCP 连接相同(每个客户端/服务器对唯一)。如果我一直看到新客户端出现通道故障错误,那么客户端创建的每个新通道可能从一开始就被破坏了。这是否意味着故障发生在 ServiceHost 内部的某个地方?在这里捕获 host.Faulted 事件会有什么好处吗?

决议更新 (2013)

我知道我问这个问题已经很长时间了 - 但我只是在我的历史中注意到它,我想我应该补充一点,尼克已经一针见血了。我相信这是导致问题的消息有效负载大小。消息中包含一个“报告”对象列表,每个对象都链接到前一个报告。随着时间的推移,这个列表会增长。修剪旧报告并将 WCF 消息保持在或多或少固定的大小可以阻止故障。在过去的几年里,该应用程序一直非常可靠地运行。

0 投票
1 回答
4212 浏览

c# - 在 C# 中使用 NetNamedPipeBinding 获取 EndpointNotFoundException;需要创建全局命名管道

我正在运行一个 Windows 服务,我通过 NetNamedPipeBinding 向该服务发送消息。消息从由 GPO 触发的客户端应用程序发送。我刚刚在新服务器上安装了服务和客户端,我收到以下消息:

没有内在的例外。如果我通过双击桌面上的图标来运行客户端应用程序,它就可以正常运行。我管理 Windows 服务和客户端应用程序的代码,因此我可以更改我需要的任何内容。但到目前为止,我非常确信绑定、合同和地址都是正确的(因为从桌面运行时一切都运行良好)。我相信问题一定出在从 GPO 运行的客户端应用程序上。但我想不出任何原因会导致此错误。

更新:

我在微软的网站上读到了这个:

命名管道是 Windows 操作系统内核中的一个对象,例如进程可用于通信的共享内存部分。命名管道有一个名称,可用于单机进程之间的单向或双工通信。

如果需要在单台计算机上的不同 WCF 应用程序之间进行通信,并且您希望阻止来自另一台计算机的任何通信,则使用命名管道传输。另一个限制是,从 Windows 远程桌面运行的进程可能会被限制在同一个 Windows 远程桌面会话中,除非它们具有提升的权限。

选择运输,重点补充)

我需要客户端进程在(非特权)用户的上下文中运行,并且弹出 UAC 对话框不是一个选项。无论如何,我是否可以赋予此客户端进程提升的权限,同时保持该进程在用户上下文中运行并且不使用户具有特权?

更新#2:

似乎存在全局和本地(对于 Windows 会话)命名管道之类的东西。我相信我的 Windows 服务正在创建一个本地命名管道,如果我可以强制它创建一个全局命名管道,它将解决我的问题。(这解释了为什么我在 sysinternals“进程资源管理器”中看不到我的管道,即使我的客户端应用程序可以在我从特权会话中启动它时找到它)。问题是,我不知道(而且似乎无法找出)如何强制全局创建命名管道(c#)。有任何想法吗?

0 投票
3 回答
1636 浏览

c# - 查看当前打开的 netNamedPipe 频道?

有什么方法可以确定当前打开了哪些 netNamedpipe 通道?这将帮助我调试我的 WCF 客户端/服务器并确保我正确关闭了我的频道。

这类似于用于网络连接的 netstat 工具,但用于 netNamedPipes。

0 投票
1 回答
642 浏览

wcf - 使用 NetNamedPipeBinding 托管在 Windows 服务上的 Wcf 服务的安全性

我创建了一个 WCF 服务,它通过 NetNamedPipeBinding 协议托管在 Windows 服务上。现在我想为这个服务提供安全性,因为只有知道用户名和密码的用户才能访问这个服务。那么我如何提供方法级别的身份验证用户访问此服务?

0 投票
1 回答
731 浏览

wcf - Windows Server 2008 上的 WCF NetNamedPipeBinding TimeoutException

我对 WCF NetNamedPipeBinding 有疑问。当我在 Windows XP 机器上通过 Visual Studio 2008 运行我的服务器和客户端代码时,一切正常。但是,一旦我将服务器部署为 Windows 服务并在 Windows Server 2008 中安装我的客户端应用程序,每当我尝试使用任何合同方法时,我都会在客户端收到 TimeoutException。看来我可以成功创建客户端并打开它,但无法调用任何方法。

服务初始化代码:

客户端初始化代码:

Windows 服务作为“本地系统帐户”运行。我不知道问题出在哪里。不知道是不是安全账户的问题,还是命名管道是否打开了?我假设因为我可以成功创建并打开客户端,所以它至少会找到命名管道。如果没有 TimeoutException,我就无法调用任何服务方法。

0 投票
2 回答
1403 浏览

c# - 如何提高 wcf 服务的序列化速度?

又是一个关于 wcf 服务压缩的问题。我正在使用 netnamedpipe 绑定将一些实体对象发送到我的调用应用程序。我知道,这是一个坏主意,但这是我的客户希望它实施的方式。

所以现在,我必须通过 netnamedpipe 发送大约 45000 个数据集(实体对象)。这真的很慢。我已经实现了一个类,它在发送之前将数据对象压缩为字节 [],但是 45000 组仍然需要大约 45 秒来发送/接收。

我是这样压缩的:

有没有办法改善它?45秒太多了:(我认为,主要原因可能是我的实体对象的序列化..但是如何加快速度?