2013-07-11 29 views
2

我想使用Java/.NET橋與服務器進行通信。這座橋是用jni4net建造的,似乎可行(到目前爲止)。jni4net - System.Runtime.Remoting.RemotingException

public static void main(String[] args) { 
    File sibDll = new File("SibKernel.Client.j4n.dll"); 

    Bridge.setVerbose(true); 
    Bridge.setClrVersion("v20");  

    try { 
     Bridge.init(); 

     Bridge.LoadAndRegisterAssemblyFrom(sibDll); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (SibKernelHelper.isConfigured() == false) { 
     SibKernelHelper.Configure(); 
    } 

    IMasterBoardManager mstrBoardMngr = SibKernelHelper.GetMasterBoardManager(); 
    } 

我真的不知道問題是什麼。有沒有人有過這樣的問題的經驗?

以下是完整的異常堆棧跟蹤:

Exception in thread "main" System.Runtime.Remoting.RemotingException: Cannot load type 'net.sf.jni4net.jni.IJvmProxy, jni4net.n-0.8.6.0, Version=0.8.6.0, Culture=neutral, PublicKeyToken=134a23405600bab4'. 

Server stack trace: 
    at System.Runtime.Remoting.Messaging.MethodCall.ResolveMethod(Boolean bThrowIfNotResolved) 
    at System.Runtime.Remoting.Messaging.MethodCall..ctor(Object handlerObject, BinaryMethodCallMessage smuggledMsg) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryMethodCall.ReadArray(Object[] callA, Object handlerObject) 
    at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryRequestMessage(String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel) 
    at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
    at net.sf.jni4net.jni.IJvmProxy.get_JvmHandle() 
    at net.sf.jni4net.utils.Convertor.FullC2J[TBoth](JNIEnv env, TBoth obj) 
    at SibKernel.Client.__SibKernelHelper.GetMasterBoardManager6(IntPtr __envp, JniLocalHandle __class) 
    at sibkernel.client.SibKernelHelper.GetMasterBoardManager(Native Method) 
    at client.SIBClient.main(SIBClient.java:28) 

回答

0

似乎你試圖實例某種類型的繼承或依賴jni4net,但問題發生在你的.NET遠程的另一面。 可能您正在將Java對象的實例作爲遠程調用的參數傳遞。

+0

Hi Pavel! :)那麼,執行的代碼將彙集到我用jni4net橋接的.dll文件中。目前沒有任何創造。只執行三個調用:'isConfigured()','Configure()'和'GetMasterBoardManager()'。由於'GetMasterBoardManager()'能夠啓動服務器,因此這些調用似乎工作至今。服務器啓動後似乎崩潰了。我仍然不知道問題出在哪裏或發生了什麼.. – displayname

+0

我是否需要對遠程調用的服務器進行任何添加?我沒有解決問題。代碼被調用並執行。服務器不需要知道任何jni4net程序集,是嗎?我期待的代碼 - 一旦執行 - 返回到Java應用程序。我真的需要得到這個運行.. – displayname

相關問題