0

我正在开发一个需要与远程客户端合作的 Unity 项目。我创建了一个接口类,并且在另一个 Unity 项目中使用了远程服务器。

当服务器正常工作时,客户端的创建失败并出现以下异常:

System.TypeInitializationException:System.Runtime.Remoting.Channels.SocketCache 的类型初始化程序引发了异常---> System.NotImplementedException:请求的功能未实现。在 System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject,System.Threading.WaitOrTimerCallback 回调,System.Object 状态,TimeSpan 超时,布尔 executeOnlyOnce)[0x00000] 在:0

我的客户代码:

MyRemotableObject remoteObject;

void Awake ()
{
    try
    {
        TcpChannel chan = new TcpChannel();
        ChannelServices.RegisterChannel(chan, false);
        remoteObject = (MyRemotableObject)Activator.GetObject(typeof(MyRemotableObject), "tcp://localhost:124/TargetShooterMenu");
    }
    catch (Exception e)
    {
        Debug.LogError(e.ToString());
    }
....

有谁知道如何解决这个问题?根据Mono FAQ,Mono 应该有远程支持。我在 Windows 7 x64 Professional 机器上使用 Unity 3.5.1(应该有 Mono 2.6.3)。

提前致谢

4

2 回答 2

1

我正在使用 Unity 做同样的事情。

您要做的第一件事是将播放器 Api 兼容级别从“.Net 2.0 子集”更改为“.Net 2.0”

接下来,您必须从 MonoDevelop 获取 2.0 单声道库“System.Runtime.Remoting.dll”

我的位于“/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Libraries/mono/2.0/System.Runtime.Remoting.dll”

将其放入“Assets/Plugins”文件夹中,Unity 将负责拖出其余的库。

从那时起,似乎远程工作顺利:)

如果您添加 Remoting dll 并构建只是发现一个错误,如“但不允许包含或找不到 dll”,那么您仍在使用“.Net 2.0 子集”

于 2013-10-24T00:01:09.797 回答
0

这里有两个选项:

  1. 使用的 .NET 子集不支持它。在播放器设置中切换 2.0 子集和完整 2.0 并再次测试
  2. 如果这没有帮助,那么我担心除了实现自己的协议或使用 DLLImport 实现真正的本机代码之外,您将无能为力。这里的问题是不安全的代码依赖,在 Unity 中通常被禁用并从其自定义 Mono 版本(基于 Mono 2.6)中删除。Unity 既不支持也不使用系统 Mono 版本,因此基于这些的任何测试和假设在这种情况下都无关紧要。
于 2013-05-02T21:00:28.097 回答