如何解决NotSupportedException: System.ServiceModel.Channels.BufferManager - Hololens 2 & OPC UA SDK for .NET
我正在尝试使用 OPC UA 协议读取 Hololens 2 上节点的值。
我使用 .NET 的 OPC UA SDK (Opc.UaFx.Client 2.14.0)。我使用以下代码连接到服务器:
public bool ConnectToOpcUaMachine(string machineIp) {
try {
_client = new OpcClient(machineIp);
_client.OperationTimeout = 2000;
_client.Connect();
} catch( System.Exception ex ) {
Debug.Log("Couldn't connect to OPC server");
Debug.LogException(ex);
return false;
}
return true;
}
当我在编辑器中调用此方法时,我成功连接到服务器并可以读取节点值。但是,当我尝试在 Hololens 2 上做同样的事情时,我收到以下错误:
NotSupportedException: System.ServiceModel.Channels.BufferManager::CreateBufferManager
at System.ServiceModel.Channels.BufferManager.CreateBufferManager (System.Int64 maxBufferPoolSize,System.Int32 maxBufferSize) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.Bindings.BufferManager..ctor (System.String name,System.Int32 maxPoolSize,System.Int32 maxBufferSize) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.SaveSettings (System.Uri url,Opc.Ua.TransportChannelSettings settings) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.Initialize (System.Uri url,Opc.Ua.TransportChannelSettings settings) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.WcfChannelBase.CreateUaBinaryChannel (Opc.Ua.ApplicationConfiguration configuration,Opc.Ua.EndpointDescription description,Opc.Ua.EndpointConfiguration endpointConfiguration,System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate,Opc.Ua.ServiceMessageContext messageContext) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.DiscoveryChannel.Create (System.Uri discoveryUrl,Opc.Ua.ServiceMessageContext messageContext) [0x00000] in <00000000000000000000000000000000>:0
at Opc.Ua.DiscoveryClient.Create (System.Uri discoveryUrl,Opc.Ua.EndpointConfiguration configuration) [0x00000] in <00000000000000000000000000000000>:0
at va..ctor (System.Uri a,Opc.UaFx.OpcApplicationConfiguration b) [0x00000] in <00000000000000000000000000000000>:0
at Opc.UaFx.Client.OpcDiscoveryClient..ctor (System.Uri discoveryUrl,Opc.UaFx.OpcApplicationConfiguration configuration) [0x00000] in <00000000000000000000000000000000>:0
at Opc.UaFx.Client.OpcClient.a (System.Uri a,Opc.UaFx.OpcApplicationConfiguration b) [0x00000] in <00000000000000000000000000000000>:0
at Opc.UaFx.Client.OpcClient.a () [0x00000] in <00000000000000000000000000000000>:0
at Opc.UaFx.Client.OpcClient.ConnectCore () [0x00000] in <00000000000000000000000000000000>:0
at Opc.UaFx.Client.OpcClient.Connect () [0x00000] in <00000000000000000000000000000000>:0
at OpcUaClientScript.ConnectToOpcUaMachine (System.String machineIp) [0x00000] in <00000000000000000000000000000000>:0
at OpcUaClientScript.GetDebugVal () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.Events.UnityAction.Invoke () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.Events.InvokableCall.Invoke () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.UI.Button.Press () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler,UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1].Invoke (T1 handler,UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target,UnityEngine.EventSystems.BaseEventData eventData,UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.StandaloneInputModule.ReleaseMouse (UnityEngine.EventSystems.PointerEventData pointerEvent,UnityEngine.GameObject currentOverGo) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.StandaloneInputModule.ProcessMousePress (UnityEngine.EventSystems.PointerInputModule+MouseButtonEventData data) [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.StandaloneInputModule.ProcessMouseEvent (System.Int32 id) [0x00000] in <00000000000000000000000000000000>:0
at Microsoft.MixedReality.Toolkit.Input.MixedRealityInputModule.Process () [0x00000] in <00000000000000000000000000000000>:0
at UnityEngine.EventSystems.EventSystem.Update () [0x00000] in <00000000000000000000000000000000>:0
解决方法
HoloLens 应用程序使用 IL2CPP 脚本后端来构建项目,并且它具有一些固有的 scripting restrictions。另外,我注意到有一个关闭的问题反馈说 OPC UA 与 Unity IL2CPP 脚本后端的兼容性问题,它可能对您有帮助:https://github.com/OPCFoundation/UA-.NETStandard/issues/760#issuecomment-514502763
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。