我想通过RPC访问.NET编译的程序集(调用代码是Python,但这不是真正相关的。)
程序集代表正在运行的第三方应用程序的API(例如,Autodesk AutoCAD)。它包含几个名称空间,其中包含包含API对象的静态类。我需要访问该对象层次结构中的各种内容:属性,对象,方法以及可能最复杂的使用IDisposable接口的事务(这实际上意味着应该在RPC调用之间维护状态,即对象存储)。 p>
我不知道继续开发自己的解决方案(使用ZeroMQ消息传递和基于反射的呼叫调度),我不知道什么是RPC技术才能满足我的需求。
我研究了实现JSON-RPC和SOAP的流行库的基本示例。我看到这些库要求您从其基类继承可调用类并将属性放入类声明中,例如
[SoapMethod("RequestResponseMethod")]
以便RPC工作。显然,在外部预编译程序集的情况下,我不能这样做。
我想知道JSONRPC或SOAP是否确实是我所描述的任务的错误选择,或者实际上有一种方法可以使用我不知道的外部程序集来使用RPC。
由于我没有使用任何现有RPC技术的经验,因此非常感谢任何指导,评论或基本建议。
答案 0 :(得分:1)
如果你在谈论JSON / SOAP,我想你正在使用HTTP,这是无状态=>你需要提供某种“状态变量”。这可以通过例如我的考试中有一个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);
}
}
这应该为您提供如何实施此类服务的起点。