我可以使用什么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技术,没有经验。
如果你正在谈论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);
}
}
这应该给你一个起点指出如何实施这样的服务。
感谢您的回答!我现在使用网络套接字并研究使用HTTP的选项。运输在这一点上并不重要。 包装服务看起来像我会尽量避免的,因为这意味着我需要将目标API中的每个属性和方法都打包到我想调用的目标API中,如果我正确地阅读了示例。 – 2014-10-08 14:38:58
'包装服务看起来像我会尽量避免的,因为那意味着我需要在目标API中包装每个属性和方法,如果我正确地读取示例,则需要打包。“是的,您是正确的,但IMO没有办法,如果你使用外部的API ... – ChrFin 2014-10-08 14:45:25
那么,目前我这样做的方式涉及反射。在接收代码中,我有一个我希望能够调用的静态类的字典。然后我通过解析传入的RPC消息中的字符串来调用对外部API的调用。这样我可以避免编写包装。 – 2014-10-08 14:48:11
将它作为Windows服务托管? – 2014-10-08 13:42:42
我不确定这将如何为问题提供解决方案。小心分享任何参考? – 2014-10-08 13:44:53