我可以使用什么RPC技术在C#中调用编译程序集(而不是我自己的类)?

问题描述:

我想通过RPC访问一个.NET编译程序集(调用代码是Python,但实际上并不相关)。我可以使用什么RPC技术在C#中调用编译程序集(而不是我自己的类)?

的组件,表示到正在运行的第三方应用程序(的Autodesk的AutoCAD,例如)的API。它包含几个名称空间,其中包含包含API对象的静态类。我需要访问该对象层次结构中的各种东西:使用IDisposable接口的属性,对象,方法以及可能最复杂的事务(这实质上意味着应在RPC调用之间维护状态,即对象存储)。

,而不是继续开发自己的解决方案(使用ZeroMQ消息和基于反射的呼叫调度),我不知道什么RPC技术会满足我的需求。

我看着实现JSON-RPC和SOAP流行的库的基本示例。我看到这些库要求你从他们的基类继承您的调用类,并把属性为类声明,例如

[SoapMethod("RequestResponseMethod")] 

为了RPC工作。显然,在外部预编译程序集的情况下,我无法做到这一点。

我想知道,如果JSONRPC或SOAP的确是我所描述或实际存在的方式,使RPC工作,我不知道外部装配任务错误的选择。

任何指导意见,意见或基本咨询,将不胜感激,因为我有使用任何现有的RPC技术,没有经验。

+0

将它作为Windows服务托管? – 2014-10-08 13:42:42

+0

我不确定这将如何为问题提供解决方案。小心分享任何参考? – 2014-10-08 13:44:53

如果你正在谈论JSON/SOAP我猜你是使用HTTP,这是无状态=>您需要提供某种“状态变量”的。这可以通过例如在我examle一个cookie或类似:

要访问外部API创建一个“包装服务”(使用WCF或“老派网络服务”):

public class MyApiAccess : IMyApiService 
{ 
    private static Dictionary<int, MyAPI> apiInstances = new Dictionary<int, MyAPI>(); 

    public int StartSession() 
    { 
     var api = new MyAPI(); 
     int id = api.Id; // or some other way to get an unique id 
     apiInstances.Add(id, api); 
     return id; 
    } 
    public void EndSession(int sessionId) 
    { 
     // ensure "sessionId" is valid 
     var api = apiInstances[sessionId]; 
     api.Dispose(); 
     apiInstances.Remove(api); 
    } 

    public MyType MyMethod(myParameter param) 
    { 
     // ensure "sessionId" is valid 
     var api = apiInstances[sessionId]; 
     return api.MyMethod(param); 
    } 
} 

这应该给你一个起点指出如何实施这样的服务。

+0

感谢您的回答!我现在使用网络套接字并研究使用HTTP的选项。运输在这一点上并不重要。 包装服务看起来像我会尽量避免的,因为这意味着我需要将目标API中的每个属性和方法都打包到我想调用的目标API中,如果我正确地阅读了示例。 – 2014-10-08 14:38:58

+1

'包装服务看起来像我会尽量避免的,因为那意味着我需要在目标API中包装每个属性和方法,如果我正确地读取示例,则需要打包。“是的,您是正确的,但IMO没有办法,如果你使用外部的API ... – ChrFin 2014-10-08 14:45:25

+0

那么,目前我这样做的方式涉及反射。在接收代码中,我有一个我希望能够调用的静态类的字典。然后我通过解析传入的RPC消息中的字符串来调用对外部API的调用。这样我可以避免编写包装。 – 2014-10-08 14:48:11