问题标签 [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.
c# - 通过 NetNamedPipeBinding 连接到 WCF 服务的问题
我无法弄清楚如何让命名管道 WCF 服务正常工作。该服务与可执行文件位于单独的程序集中。
配置如下所示:
我正在使用 ChannelFactory 创建代理来访问服务主机:
我不确定创建 ChannelFactory 时我做错了什么。它似乎在配置中找不到“channel1”。当我手动创建绑定并将其传递给 ChannelFactory 构造函数时,会创建工厂和代理,但对 LoadData() 的调用失败(超时)。
谁能看到我在这里做错了什么?
编辑:我在 app.config 上方进行了编辑,以确保两个端点具有完全相同的数据。这解决了我的 Channelfactory 问题。但是,如上所述对服务方法的调用仍然超时。
wcf - WCF 命名管道 IPC
这周我一直在努力跟上命名管道的速度。我试图与他们一起解决的任务是我有一个现有的 Windows 服务,它充当设备驱动程序,将数据从外部设备汇集到数据库中。现在我必须修改这个服务并添加一个可选的用户前端(在同一台机器上,使用一种 IPC 形式),它可以监控设备和数据库之间传递的数据,并将一些命令发送回服务.
我对 IPC 的最初想法是命名管道或内存映射文件。到目前为止,我一直在使用WCF Tutorial Basic Interprocess Communication解决命名管道的想法。我的想法是使用实现 WCF NamedPipe 服务的附加线程设置 Windows 服务,并将其用作驱动程序内部的管道。
我的示例代码可以正常工作,但是我无法解决 2 个问题,我希望这里的人可以帮助我:
在本教程中,ServiceHost 使用 typeof(StringReverser) 实例化,而不是通过引用具体类。因此,似乎没有服务器与服务本身交互的机制(在 host.Open() 和 host.Close() 行之间)。是否可以在服务器和实际实现服务的类之间创建链接并传递信息?如果是这样,怎么做?
如果我运行服务器的单个实例,然后运行客户端的多个实例,似乎每个客户端都获得了服务类的单独实例。我尝试向实现服务的类添加一些状态信息,它只保留在命名管道的实例中。这可能与第一个问题有关,但是无论如何强制命名管道使用实现服务的类的相同实例?
最后,关于 MMF 与命名管道的任何想法?
编辑 - 关于解决方案
根据 Tomasr 的回答,解决方案在于使用正确的构造函数来提供实现服务的具体单例类(ServiceHost Constructor (Object, Uri[]))。当时我不欣赏的是他提到确保服务类是线程安全的。天真地只是更改构造函数导致服务器崩溃,这最终导致我从这篇博客条目InstanceContextMode 和 Concurrencymode中理解了 InstanceContextMode 。设置正确的上下文很好地完成了解决方案。
wcf - 出于安全原因,我应该在 WCF 中使用 NetNamedPipe 绑定吗?
WCF 文档说“网络命名管道”绑定可用于单台机器上的快速进程间通信。它不能用于跨机器的通信。
我想知道使用网络命名管道绑定是否会保护我的服务免受来自网络外部的攻击。有人告诉我答案是否定的。尽管网络命名管道绑定旨在用于同一台机器上的进程间通信,但它可以被黑客入侵以允许从其他机器访问。那准确吗?
WCF 专家,请插话。使用 Net Named Pipe 绑定是否可以从本质上保护我的服务免受其他机器未经授权的访问?
wcf - 在 impersonate=true 的网站中使用 WCF 的 net.pipe
我正在尝试在网站中使用 WCF 命名管道,但失败并出现错误:
在 net.pipe://localhost/mypipename 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。
和内部异常:
还有另一个内部异常给出access denied
消息。
我的网站正在使用模拟,并且环顾互联网,这似乎是相关的,但我不知道如何解决它。
有没有人有任何想法?
谢谢马特
wcf - 在 NetNamedPipe 服务端点的端点地址上设置 SPN
如其他地方所述,我收到“net.pipe://localhost 没有端点监听”错误,但我似乎找不到真正的答案。
这是问题的一个很好的标识符:http: //kennyw.com/indigo/102
使用 WCF 时,Windows 身份验证是通过 SSPI-Negotiate 执行的,在大多数情况下会选择 Kerberos 作为实际的身份验证机制。但是,如果传递给 SSPI 的目标 SPN 是本地计算机帐户的格式正确的 SPN(例如主机/[dns 机器名称]),则协商将使用 NTLM(环回优化)并且访问令牌将没有网络 SID(并且因此将可与 NetNamedPipes 一起使用)。
但它并没有告诉我如何解决这个问题。我正在以编程方式创建我的端点。
我猜我的问题出在 CreateSpnIdentity 但我不确定要使用什么值。
附加信息: 详细说明这一点以获得更多背景信息。Wcf 服务托管为在 NetworkService 帐户下运行的 Windows 服务(我尝试过本地系统)。该服务是使用默认的 NetNamedPipeBinding 构造函数创建的:
我创建了一个使用此服务的 SharePoint Webpart。更重要的是,如果 SharePoint 网站设置为基于表单的身份验证,或者在 Windows 身份验证下的 url 中仅使用机器名称,则没有问题。只有当 Windows 身份验证下的 url 使用完全限定的机器名称时,我才会收到上述错误。
我很确定这与文章中描述的 NTLM Kerberos 问题有关,但我不确定如何解决它。
.net-3.5 - 如何解决 WCF 中的 PipeExceptions 和 CommunicationExceptions?
我有一个由几个 WCF 服务组成的应用程序,其中一些是在 Workflow Foundation (.NET 3.5) 中实现的,其他的只是普通的 C#。出于性能原因,这些服务通过 netNamedPipeBinding 相互通信。问题是,一旦系统负载增加,我就会看到越来越多的 CommunicationExceptions 和底层 PipeExceptions。有趣的是,这些交易似乎最终完成了。原因之一是我们在工作流中有重试机制,但即使来自普通 C# 服务的调用也会成功,即使我在 WCF 跟踪中看到这些错误。Windows的命名管道子系统中有一些重试机制吗?
但是,我希望修复这些错误,或者至少了解潜在的问题。我觉得它们正在影响应用程序的性能和稳定性。如果我没有看到来自服务本身的任何其他异常,我该如何正确诊断这些错误的根本原因?
以下是我得到的一些例外情况:
PipeException: 从管道读取错误:管道已结束。(109, 0x6d)。
和:
PipeException: 操作无法完成,因为管道已关闭。这可能是由于管道另一端的应用程序退出造成的。
在 TimeoutException 内: 管道连接被中止,因为从管道的异步读取未在分配的 00:02:00 超时内完成。分配给此操作的时间可能是较长超时的一部分。
现在超时异常似乎来自系统无法处理负载的事实。这些操作通常很小,但它们的数量似乎是问题所在。或者这可能是以前的管道连接被终止并且没有返回到池中的结果?
我尝试在 WCF 配置中尝试使用 serviceThrottling 行为来增加实例数量等,但这些错误不断出现。有小费吗?
/编辑:我确实打开了 WCF 跟踪和消息日志记录。这就是我看到 PipeExceptions 和 CommunicationExceptions 的地方。应用程序本身没有显示任何错误。我们已经对 WCF 服务进行了相当多的检测,以便使用 log4net 记录所有异常,并且我在这些日志中根本看不到任何错误。这一切似乎都发生在 WCF 级别。
wcf - 添加新的 net.pipe 绑定时的绑定信息字段
在 IIS 中添加新的 net.pipe 绑定时,绑定信息字段有什么用?我被告知要在其中输入 *,但我想知道它的用途。
wcf - 通过命名管道从 Windows 服务(会话#0)连接到桌面应用程序(会话#1)
给定:
- 应用程序 - 桌面 GUI (WPF) .NET 应用程序
- 监视应用程序的 Windows 服务(也是 .NET)
Windows 服务会定期“ping”应用程序以确保它是健康的(如果不是,winservice 将重新启动它)。
我打算通过命名管道实现“pinging”。为了让事情更简单,我决定用 WCF 来做。该应用程序托管 WCF 服务(一个操作 Ping 返回某些内容)。Windows 服务是此 WCF 服务的客户端,基于计时器定期调用它。
这就是 Windows 7 中的全部
内容。Windows 服务在 LocalService 下运行(在 session#0 中)。
桌面应用程序正在当前登录的用户下运行(在会话#1 中)。
问题:
Windows 服务看不到在桌面应用程序中创建和监听的 WCF 端点(使用 NetNamedPipeBinding)。这意味着通过 wcf 代理进行调用时,我会收到此异常:“在您的本地计算机上找不到管道端点 'net.pipe://localhost/HeartBeat'”
我确定代码没问题,因为另一个桌面应用程序(在 session#1 中)可以看到端点。
显然,在这里我正在处理一些用于 Win32 系统对象隔离的安全问题。但我相信应该有办法解决我遇到的限制。
我可以牺牲 WCF 方法并采用原始的 NamedPipe 方式。
c# - 使用 oneWay 调用通过 NetNamedPipeBinding 进行订购交付
是否可以使用 namedPipe 绑定通过 oneWay 调用来保证有序交付?
我有一个使用 namedPipe 绑定进行通信的 WCF 服务/客户端。客户端公开了一个回调合约,其中回调中的所有方法都标记为 OneWay。像这样的东西
在服务器端,MyOperation 方法的实现总是先调用 MyCallback1,然后是 MyCallback2,但我观察到有时客户端以错误的顺序接收调用(首先是 MyCallback2,然后是 MyCallback1)。
在搜索互联网时,我发现这里提到的单向操作不能保证顺序,还有一种叫做可靠会话的东西可以确保消息排序。
Internet 上所有用于可靠会话的示例都使用 TCP 绑定(而不是单个使用 NamedPipeBinding),并且 tcpBinding 还具有一个名为ReliableSession的属性,该属性在 NetNamedPipeBinding 上不存在。所以我不确定可靠会话是否可以与 NetNamedPipeBinding 一起使用。
问题:
可靠会话是否适用于 namedPipeBinding?如果是,如何?如果没有,是否有任何其他方法可以保证订单交付?
file-upload - wcf文件上传netnamedpipe管道关闭错误
我正在通过文件上传控件在 asp.net 中上传文件。我正在从发布的文件中获取流并转换为字节数组并传递给服务。我收到此错误:写入管道时出错:管道正在关闭。(232, 0xe8)。
我们使用netNamedPipe绑定..托管在Windows服务中..这个错误是上传超过6KB..下载没有问题..我已将超时和最大消息大小值增加到大..但仍然存在错误..