SSL/TLS secure channel

Hi,
I have a Flow that makes many API calls(1,000). When the Flow reaches around 250 loops, I get the following error:
image

Have anyone ran into this issue?

Hi,

Not exactly sure why the SSL handshake fails but looping and executing 1000 individual HTTP requests sounds like you can might overload the service with requests. And if I were to guess the service stops responding.

What’s the scenario here? Why 1000 calls in a loop?

Hi,

  1. We need to get all the vessels. 520
  2. Loop through the vessels and get the ProductID.
  3. Get the Analysis for the ProductID.
  4. Get the Compositions for the ProductID.
    Those are all the API calls. If you know of a better way to get all this information, please let me know?

2024-04-30T08:13:46.6285753-07:00: One or more errors occurred. at at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result()
at NovaCura.Flow.Connector.Rest.RestApi.Get(RestRequest request)
at DynamicModule.ns.Wrapped_IRestApi_86a2c1badc3a4cb9ad6ee5aa4c04ceb8.<Get_DelegateImplementation>__0(IMethodInvocation inputs, GetNextInterceptionBehaviorDelegate getNext)
InnerException: An error occurred while sending the request. at
InnerException: The request was aborted: Could not create SSL/TLS secure channel. at at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result()
at NovaCura.Flow.Connector.Rest.RestApi.Get(RestRequest request)
at DynamicModule.ns.Wrapped_IRestApi_86a2c1badc3a4cb9ad6ee5aa4c04ceb8.<Get_DelegateImplementation>__0(IMethodInvocation inputs, GetNextInterceptionBehaviorDelegate getNext)

Does anyone know of Novacura settings that need to happen for the REST connector? Here’s another error I see from the server:
Time measurement exception
System.Exception: One or more errors occurred.
An error occurred while sending the request.
The request was aborted: Could not create SSL/TLS secure channel.

at NovaCura.Flow.ApiConnector.AssemblyApi.AssemblyCaller.Call(MethodInfo method, OperationDescription operation, TrinketDictionary trinkets, Object onThisObject, Nullable1 cancellationToken, Object referencedObject) at NovaCura.Flow.ApiConnector.AssemblyApi.AssemblyApiSource.Execute(OperationDescription operation, String username, String password, IEnumerable1 taskAuthorizations, ITrinketSpace trinkets, ITreasurer treasurer, IPackingKit packingKit, ITableTrinketFactory tableTrinketFactory)
at NovaCura.Flow.Connector.Rest.RestServiceConnectorApiSource.Execute(OperationDescription operation, String username, String password, IEnumerable1 taskAuthorization, ITrinketSpace trinkets, ITreasurer treasurer, IPackingKit packingKit, ITableTrinketFactory tableTrinketFactory) at NovaCura.Flow.ApiConnector.MethodCallTask.Execute(IReadOnlyDictionary2 input, String userName, String password, IEnumerable1 taskAuthorization, ITreasurer treasurer, IPackingKit packingKit, ITableTrinketFactory tableFactory, TimeMeasurement timeMeasurement) at NovaCura.Flow.Server.SharedServices.ConnectorTaskService.<>c__DisplayClass20_1.<ExecuteAsync>b__2(TimeMeasurement t) at NovaCura.Framework.Diagnostic.RootTimeMeasurement.Measure[T](Func2 func)

I see.

I would aim to minimize the number of requests to the API. How to achieve this depends on the query options available and the dataset sizes in steps 2, 3, and 4. If the dataset isn’t too large, fetching all data and querying and joining data within the workflow is probably way faster using the inner join function.

Is it possible to fetch 50 vessel product IDs at a time? Other API method where you can use an array/list as query parameter?

Additionally, could you configure a new API method within the service that merges the necessary data for vessels into a single call? Since the productId appears to be the key?

When working with large datasets in Flow, I recommend reading this help section on Workflow performance: Performance Guidelines | Flow Classic Help | Flow Help (novacuraflow.com)

If the end-point is not reachable, the flow crashes. Is there a way to tell the flow that if the end-point is not reachable to try it again? There must be some way to capture the NovaCura error and do something with it besides the Flow totally crashing.

Hi,
looks like you are making REST calls so in the case of endpoint not reachable do you get a 404 response?

If so, you can set up a decision step (when HttpStatusCode = 404) to maybe wait a bit and then try the call again.

Hope this helps!

B R
Ivan