代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

如何使wcf命名管道地址等于winapi地址?

  •  3
  • Jader Dias  · 技术社区  · 14 年前

    我注意到WCF的命名管道地址

    net.pipe://localhost/mynamedpipe
    

    和Windows API

    \\.\pipe\mynamedpipe
    

    不要碰撞。为什么?我怎样才能让它们指向同一个管道?

    3 回复  |  直到 11 年前
        1
  •  4
  •   Community davidgyoung    7 年前

    没有记录在案的方法可以做到这一点。经过几次测试,我得出了以下结论:

    如果您有WCF服务器和Win32 C++客户端,最后一个将以下面的格式将第一个地址视为UUID:

    12345678-1234-1234-1234-123456789abc

    这个UUID看起来是随机的,因为每次服务器启动时,它都会改变同一个WCF地址。

    我不知道Wi32 C++命名管道服务器是否有一个GUID格式地址将从WCF客户端可见,但我确信如果它确实如此,服务器将不得不实现WCF所使用的文档记录不足的协议。

    提供此类协议的文件作为对 my previous question on this subject.

    编辑 进一步的研究表明,管道地址存储在文件映射中。这个入口地址依次是netnamedpipe地址的标准化版本的base64编码散列。

        2
  •  2
  •   Steve Townsend    14 年前

    根据 this from Stephen Cleary . 考虑到WCF和Win32不相交的管道名称空间的上下文,这是有意义的。

    所有以“net”开头的WCF绑定都是 .NET特定。他们使用某种协议 (这是无证件的阿法克)未来可能会改变。

    如果您只需要知道管道名称,那么您就可以(通过消除?)解决这个问题。使用 pipelist from Sysinternals . 我想,在世界自然基金会的覆盖下,潜伏着一个本地命名的管道…

        3
  •  0
  •   Chris Dickson    14 年前

    here 我在尝试做类似的事情时发现了一些细节。

    您无法控制管道的WCF端(好吧,必须放弃netnamedpipebinding并创建自己的命名管道传输)。但是,如果您准备好使用本地代码,就可以从中找到并打开WCF管道。