需要用 C# 编写的 RPC 调用示例

Posted

技术标签:

【中文标题】需要用 C# 编写的 RPC 调用示例【英文标题】:Need RPC call example written in C# 【发布时间】:2009-12-18 23:28:14 【问题描述】:

我正在处理 WMI 连接错误和超时,并将尝试首先检查 RPC 堆栈。我找到了以下 C 代码 sn-p,但不明白它是否以及如何工作,以及在哪里可以找到更多信息甚至是示例。

RPC_STATUS 状态; 无符号短 *StringBinding; RPC_BINDING_HANDLE 绑定句柄; 状态 = RpcStringBindingCompose ( NULL, // 对象 UUID L"ncacn_ip_tcp", // 要使用的协议序列 L"MyServer.MyCompany.com", // 服务器 DNS 或 Netbios 名称 空值, 空值, 字符串绑定(&String) ); // 忽略错误检查。如果没有错误,我们继续下面 状态 = RpcBindingFromStringBinding(StringBinding, &BindingHandle); // 无论来自 RpcBindingFromStringBinding 的错误如何,都释放字符串 RpcStringFree(&StringBinding);

这段代码真的能建立联系吗? 有人有 C# 的互操作声明吗?

到目前为止谢谢。

br--马布拉

【问题讨论】:

你通过要求 C# 代码并向他们展示看起来很古老的 C++ 来吓跑人们。它可能实际上并不古老,只是看起来而已,但无论如何尝试将其编辑为一个更短、更专注于任务的问题,而不使用 C++。 不,它很古老。并且与 WMI 无关。 对不起,但我在起点使用它,我需要它来移植以使用 C#。现在,我添加了一个 C++ 标签,希望 this.helps。 让我们尝试进入 sam 页面。这是你想做的事情吗?如果是这样,你有什么问题? msdn.microsoft.com/en-us/library/aa389762(VS.85).aspx 我不明白你想要达到什么目的。您提到了 WMI 连接错误和超时,但随后开始询问真正低级的 PRC 问题。 【参考方案1】:

这是上述示例的互操作代码:

class Rpc

    [DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
    public static extern int RpcStringBindingCompose(
        string ObjUuid,
        string ProtSeq,
        string NetworkAddr,
        string EndPoint,
        string Options,
        out string StringBinding);

    [DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
    public static extern int RpcBindingFromStringBinding(
        string StringBinding,
        out IntPtr Binding);

    [DllImport("Rpcrt4.dll", CharSet = CharSet.Auto)]
    public static extern int RpcBindingFree(
        ref IntPtr Binding);

    public Rpc()
    
        string stringBinding = null;

        int retCode = RpcStringBindingCompose(
             null,                // Object UUID
             "ncacn_ip_tcp",      // Protocol sequence to use
             "MyServer.MyCompany.com", // Server DNS or Netbios Name
             null,
             null,
             out stringBinding );

        IntPtr bindingHandle = IntPtr.Zero;
        retCode = RpcBindingFromStringBinding(stringBinding, out bindingHandle);

        retCode = RpcBindingFree(ref bindingHandle);
    

【讨论】:

非常感谢,我试试看!

以上是关于需要用 C# 编写的 RPC 调用示例的主要内容,如果未能解决你的问题,请参考以下文章

基于Hprose RPC框架

需要(RPC + C# .Net + Framework 4.0)示例 [关闭]

RPC高性能框架总结3.NIO示例代码编写和简析

如何使用 C# 从 C++ 应用程序获取调用堆栈?

RabbitMQ系列教程之六:远程过程调用(RPC)

c#调用C、C++编写的dll