# OPC-UA : Browse fail

**URL:** <https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583>\
**Category:** Ignition\
**Created:** [January 20, 2017, 9:30am UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583 "2017-01-20T09:30:55Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Amarth](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarth/32/3313_2.png) [@Amarth](https://forum.inductiveautomation.com/u/Amarth)\
**Post date:** [January 20, 2017, 9:30am UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/1 "2017-01-20T09:30:55Z")

</div>

Hello all,

I encounter a problem with the in-built OPC browser (not the tag browser) when trying to browse a specific folder/branch of a SIEMENS PLC (S7-1500). I use the PLC OPCUA Server (not the siemens driver). The PLC is declared as an OPC Server connection (and not as a device)

The problematic folder contains about 690 items. My guess is that it is too much for the OPC Browser.  
Items can be addressed by typing manually the itemPath.  
Other folders can be browsed by the OPC Browser without any UaServiceFaultException.  
The problematic folder is browsed without any error with an external UA Client (UAExpert).

My questions are :  
Does this exception come from the number of items in the folder ?  
If yes, how can this limit be raised ?

Any help or clue highly appreciated.

Regards.

[quote]com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: UaServiceFaultException: status=Bad\_TooManyOperations, message=The request could not be processed because it specified too many operations.  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.newGatewayException(GatewayInterface.java:327)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.sendMessage(GatewayInterface.java:297)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.invokeWithTimeout(GatewayInterface.java:896)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.browseOPC(GatewayInterface.java:900)  
at com.inductiveautomation.ignition.designer.sqltags.opcbrowser.OPCFolderNode.loadChildren(OPCFolderNode.java:52)  
at com.inductiveautomation.ignition.client.util.gui.tree.AbstractAsynchronousTreeNode$Loader.run(AbstractAsynchronousTreeNode.java:75)  
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)  
at java.util.concurrent.FutureTask.run(Unknown Source)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)  
at java.lang.Thread.run(Unknown Source)  
Caused by: java.util.concurrent.ExecutionException  
com.inductiveautomation.ignition.common.GenericTransferrableException: UaServiceFaultException: status=Bad\_TooManyOperations, message=The request could not be processed because it specified too many operations.  
at java.util.concurrent.CompletableFuture.reportGet(Unknown Source)  
at java.util.concurrent.CompletableFuture.get(Unknown Source)  
at com.inductiveautomation.xopc2.client.OpcUaConnection.browse(OpcUaConnection.java:495)  
at com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl$ServerWrapper.browse(OPCManagerImpl.java:754)  
at com.inductiveautomation.ignition.gateway.opc.OPCManagerImpl.browse(OPCManagerImpl.java:468)  
at com.inductiveautomation.ignition.gateway.sqltags.tagproviders.internal.InternalSQLTagsProvider.browseOPC(InternalSQLTagsProvider.java:79)  
at com.inductiveautomation.ignition.gateway.sqltags.providers.RedundantProviderWrapper.browseOPC(RedundantProviderWrapper.java:174)  
at com.inductiveautomation.ignition.gateway.sqltags.SQLTagsManagerImpl.browseOPC(SQLTagsManagerImpl.java:925)  
at com.inductiveautomation.ignition.gateway.project.ProjectSettingsCache$ProjectDefaultTagManagerFacade.browseOPC(ProjectSettingsCache.java:484)  
at com.inductiveautomation.ignition.gateway.servlets.gateway.functions.SQLTags.browseOPC(SQLTags.java:814)  
at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)  
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
at java.lang.reflect.Method.invoke(Unknown Source)  
at com.inductiveautomation.ignition.gateway.clientcomm.progress.MethodInvokeRunnable.run(MethodInvokeRunnable.java:27)  
at com.inductiveautomation.ignition.gateway.clientcomm.progress.GatewayProgressManagerImpl$GatewayProgressTask.run(GatewayProgressManagerImpl.java:233)  
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:537)  
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)  
at java.util.concurrent.FutureTask.run(Unknown Source)  
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)  
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)  
… 3 more  
Caused by: org.eclipse.milo.opcua.stack.core.UaServiceFaultException  
UaServiceFaultException: status=Bad\_TooManyOperations, message=The request could not be processed because it specified too many operations.  
at org.eclipse.milo.opcua.stack.client.UaTcpStackClient.receiveResponse(UaTcpStackClient.java:283)  
at org.eclipse.milo.opcua.stack.client.UaTcpStackClient.lambda$sendRequest$3(UaTcpStackClient.java:145)  
at java.util.concurrent.CompletableFuture.uniWhenComplete(Unknown Source)  
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(Unknown Source)  
at java.util.concurrent.CompletableFuture.postComplete(Unknown Source)  
at java.util.concurrent.CompletableFuture.complete(Unknown Source)  
at org.eclipse.milo.opcua.stack.client.handlers.UaTcpClientMessageHandler.lambda$null$19(UaTcpClientMessageHandler.java:528)  
… 3 more

Ignition v7.8.4 (b2016082217)  
Java: Oracle Corporation 1.8.0\_111[/quote]

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 20, 2017, 3:46pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/2 "2017-01-20T15:46:08Z")

</div>

I think you can work around this by lowering the “Max Per Operation” advanced setting on the OPC UA connection.

A proper fix that doesn’t require this change has been implemented in 7.9.1.

---

<div class="post-metadata">

**Author:** ![Amarth](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarth/32/3313_2.png) [@Amarth](https://forum.inductiveautomation.com/u/Amarth)\
**Post date:** [January 23, 2017, 1:09pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/3 "2017-01-23T13:09:08Z")

</div>

Thank you Kevin for your reply.

Unfortunately, the work around did not work. We lowered the value down to 4096 then 1024. The browse still fails.  
We gave a try with a value set to 16384, jst to be sure but the exception is still raised and the browse fails.

A fresh gateway start does not change anything.

Is there other workarounds we could explore to solve this problem ?

Regards.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 23, 2017, 2:20pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/4 "2017-01-23T14:20:16Z")

</div>

You may still have to go lower than 1024. If you can capture the exchange on Wireshark I can verify what is happening.

---

<div class="post-metadata">

**Author:** ![Amarth](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarth/32/3313_2.png) [@Amarth](https://forum.inductiveautomation.com/u/Amarth)\
**Post date:** [January 24, 2017, 12:46pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/5 "2017-01-24T12:46:11Z")

</div>

It worked for a value set to 333.

Thank you for your help.

---

<div class="post-metadata">

**Author:** ![avogler](https://avatars.discourse-cdn.com/v4/letter/a/50afbb/32.png) [@avogler](https://forum.inductiveautomation.com/u/avogler)\
**Post date:** [December 15, 2020, 4:19pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/6 "2020-12-15T16:19:15Z")

</div>

Hi Kevin, I have the same problem with the Java Milo SDK. Do you know how/where I can set this “MaxPerOperation” within the Java Milo SDK? Maybe it is the wrong forum, but it seems that you are a main Eclipse Milo contributor … 🙂

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 15, 2020, 4:35pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/7 "2020-12-15T16:35:52Z")

</div>

There is no equivalent in the SDK. The Ignition client uses this value (along with operation limits read from the address space) to batch operations as necessary before making service calls.

The more appropriate forums for Milo-related questions are either Stack Overflow (tagged `milo` and `opcua`) or as of a week ago the GitHub Discussions page in the repo: [https://github.com/eclipse/milo/discussions](https://github.com/eclipse/milo/discussions)

---

<div class="post-metadata">

**Author:** ![avogler](https://avatars.discourse-cdn.com/v4/letter/a/50afbb/32.png) [@avogler](https://forum.inductiveautomation.com/u/avogler)\
**Post date:** [December 15, 2020, 5:10pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/8 "2020-12-15T17:10:26Z")

</div>

Ok, thanks! I thought it is a similar issue, at least the error sounded similar, that’s why Google directed me to this forum… I will try on stackoverflow…

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 15, 2020, 5:16pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/9 "2020-12-15T17:16:49Z")

</div>

It probably is similar, and the solution is probably to implement batching of operations beyond a certain size in your client.

---

<div class="post-metadata">

**Author:** ![avogler](https://avatars.discourse-cdn.com/v4/letter/a/50afbb/32.png) [@avogler](https://forum.inductiveautomation.com/u/avogler)\
**Post date:** [December 15, 2020, 5:35pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/10 "2020-12-15T17:35:14Z")

</div>

I just tried the browse node [example](https://github.com/eclipse/milo/blob/master/milo-examples/client-examples/src/main/java/org/eclipse/milo/examples/client/BrowseNodeExample.java) from milo and my server complains that there are too many operations in the queue… I already removed the recursive call in the sample and so it should be a single browseNode SDK function call …

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 15, 2020, 5:42pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/11 "2020-12-15T17:42:12Z")

</div>

Start a discussion here and upload a Wireshark capture of the interaction: [https://github.com/eclipse/milo/discussions?discussions\_q=category%3AQ%26A](https://github.com/eclipse/milo/discussions?discussions_q=category%3AQ%26A)

Make sure you are not connecting to an endpoint with security for the capture.

---

<div class="post-metadata">

**Author:** ![avogler](https://avatars.discourse-cdn.com/v4/letter/a/50afbb/32.png) [@avogler](https://forum.inductiveautomation.com/u/avogler)\
**Post date:** [December 15, 2020, 7:36pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/12 "2020-12-15T19:36:24Z")

</div>

I think I have used the wrong example, the BrowseExample.java is doing the right job for me. I don’t know what the Browse **Node** Example.java is doing, and why it breaks my server.

But thank you very much for your help and quick responses! and I am really sorry if I have wasted your time …

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 15, 2020, 7:41pm UTC](https://forum.inductiveautomation.com/t/opc-ua-browse-fail/12583/13 "2020-12-15T19:41:42Z")

</div>

I can only guess without Wireshark or seeing your server or more information, but it sounds like your server has an exceptionally low maximum operations allowed for some service calls. The BrowseNodeExample one is using the client SDK’s AddressSpace API that creates UaNode instances, and when those are being constructed certain things happen like reading all of an Object or Variable Node’s attributes, which can be as many as 15 operations in a single read call.

Like I said… exceptionally low, if that’s what is going on. 😬
