- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在运行一个 Windows 服务,我通过 NetNamedPipeBinding 向其发送消息。消息从由 GPO 触发的客户端应用程序发送。我刚刚在新服务器上安装了服务和客户端,我收到以下消息:
System.ServiceModel.EndpointNotFoundException:
There was no endpoint listening at
net.pipe://localhost/VOXAServices/VOXADefaultPipe that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details.
没有内部异常。如果我通过双击桌面上的图标来运行客户端应用程序,它可以正常运行。我管理 Windows 服务和客户端应用程序的代码,因此我可以根据需要进行更改。但到目前为止,我非常确信绑定(bind)、契约(Contract)和地址都是正确的(因为从桌面运行时一切都运行良好)。我相信问题一定出在从 GPO 运行的客户端应用程序上。但我想不出任何会导致此错误的原因。
更新:
我在 Microsoft 的网站上看到了这个:
A named pipe is an object in the Windows operating system kernel, such as a section of shared memory that processes can use for communication. A named pipe has a name, and can be used for one-way or duplex communication between processes on a single machine.
When communication is required between different WCF applications on a single computer, and you want to prevent any communication from another machine, then use the named pipes transport. An additional restriction is that processes running from Windows Remote Desktop may be restricted to the same Windows Remote Desktop session unless they have elevated privileges.
( Choosing a Transport ,强调已添加)
我需要客户端进程在(非特权)用户的上下文中运行,并且弹出 UAC 对话框不是一个选项。无论如何,我是否可以在保持进程在用户上下文中运行而不让用户享有特权的同时,为该客户端进程提供更高的特权?
更新 #2:
似乎有全局和本地(对于 Windows session )命名管道这样的东西。我相信我的 Windows 服务正在创建一个本地命名管道,如果我可以强制它创建一个全局命名管道,它就会解决我的问题。 (这解释了为什么我在 sysinternals“Process Explorer”中看不到我的管道,即使如果我从特权 session 启动它,我的客户端应用程序可以找到它)。问题是,我不知道(而且似乎也不知道)如何强制全局创建命名管道 (c#)。有什么想法吗?
最佳答案
The mechanism by which WCF clients find WCF service NetNamedPipe endpoints涉及一个内核共享内存对象,服务使用该对象告诉客户端要使用的管道的实际名称。如果客户端要与服务器进行不同的登录 session ,则此共享内存对象必须位于全局而非本地内核命名空间中。命名管道本身有一个命名空间,对所有客户端可见。您无法直接控制 WCF 用于共享内存对象的命名空间,但如果您的服务器是使用 SeCreateGlobalPrivilege 运行的 Windows 服务,它将是全局内核命名空间。你的问题似乎暗示是这种情况,所以我怀疑你的问题是否与内核对象命名空间有关。
另外两个可能的原因是:
同时保护共享内存对象和命名管道的 ACL。这些将始终拒绝访问任何具有 NETWORK USERS 组 (SID S-1-5-2) 成员身份的安全上下文。这会强制执行 WCF 保证不会远程访问命名管道端点。
如果您在 Vista 或更高版本上运行,则客户端进程的强制完整性级别不得低于内核对象的强制完整性级别(这将是隐含级别 - 中等 - 除非您已采取使用强制完整性标签进行提升的特殊步骤)
我对由 GPO 启动的客户端进程运行的安全上下文知之甚少,无法提供进一步的建议,但我建议您检查这两种可能性,并相应地发布对您的问题的进一步更新。
关于c# - 在 C# 中使用 NetNamedPipeBinding 获取 EndpointNotFoundException;需要创建全局命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477813/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!