es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La ejecución de Docker no muestra la salida de “dotnet run”.

Estoy tratando de dockerizar un cliente OPC UA de C#, pero desafortunadamente, tengo este error:

Excepción no controlada. Opc.Ua.ServiceResultException: Error al establecer una conexión: BadNotConnected
en Opc.Ua.Bindings.ChannelAsyncOperation1.End(Int32 timeout, Boolean throwOnError)
en Opc.Ua.Bindings.UaSCUaBinaryClientChannel.EndSendRequest(IAsyncResult result)
en Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.EndSendRequest(IAsyncResult result)
en Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.SendRequest(IServiceRequest request)
en Opc.Ua.DiscoveryClient.GetEndpoints(RequestHeader requestHeader, String endpointUrl, StringCollection localeIds, StringCollection profileUris, EndpointDescriptionCollection& endpoints)
en Opc.Ua.DiscoveryClient.GetEndpoints(StringCollection profileUris)
en Opc.Ua.Client.CoreClientUtils.SelectEndpoint(String discoveryUrl, Boolean useSecurity, Int32 discoverTimeout)
en client.Program.OPCUAClass.InitializeOPCUAClient() en C:\Users\myuser\Desktop\client\Program.cs:línea 182
en client.Program.OPCUAClass..ctor(String serverAddres, String serverport, Dictionary
2 taglist, Boolean sessionrenewalRequired, Double sessionRenewalMinutes, String nameSpace) en C:\Users\myuser\Desktop\client\Program.cs:línea 98
en client.Program.Main(String[] args) en C:\Users\myuser\Desktop\client\Program.cs:línea 58

¿Alguien ha tenido este error antes? ¿O alguien ya ha dockerizado un cliente C# y sabe cómo debe escribirse un Dockerfile en este caso?

El cliente no tiene una interfaz, pero solo imprime nodos en la terminal en caso de un cambio de datos. Suelo utilizar el comando dotnet run para ejecutar el cliente. Este es mi Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:6.0-focal

COPY bin/Release/net6.0/publish/ App/
COPY tagsList.txt App/
WORKDIR /App

ENTRYPOINT ["dotnet", "client.dll"]

Y aquí están las líneas de Program.cs con errores:

58:
myOPCUAServer = new OPCUAClass(endpointURL, "62541", TagList, true, 1, "4");

98:
InitializeOPCUAClient();

182:
application.CheckApplicationInstanceCertificate(false, 2048).GetAwaiter().GetResult();

Ya intenté cambiar la dirección opc de localhost a 0.0.0.0, pero no ha cambiado nada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error que está experimentando está relacionado con el cliente OPC UA que no puede establecer una conexión. Esto podría deberse a una variedad de razones, como una URL de extremo incorrecta, configuraciones de firewall o problemas de certificado.

    En cuanto a su Dockerfile, parece correcto en su mayor parte, copiando archivos necesarios y configurando el punto de entrada para ejecutar el cliente. Sin embargo, puede valer la pena considerar la configuración correcta de los certificados y verificar la URL del extremo para asegurarse de que el cliente pueda establecer una conexión dentro del entorno Docker.

    En cuanto a las líneas específicas que causan errores en Program.cs, la línea 58 instancia el objeto OPCUAClass con parámetros, que pueden necesitar ser verificados nuevamente para su precisión dentro del entorno Docker. La línea 98 llama al método InitializeOPCUAClient, que también puede necesitar ser revisado para asegurarse de que funcione correctamente cuando se ejecuta en un contenedor Docker. La línea 182 verifica el certificado de la instancia de la aplicación, que puede necesitar ser configurado correctamente dentro del entorno Docker.

    Puede ser útil revisar la documentación de Docker y considerar las mejores prácticas para implementar aplicaciones en contenedores, incluidos problemas potenciales relacionados con la red y la seguridad. Además, podría utilizar una herramienta como Docker Compose para definir y ejecutar aplicaciones Docker multiniveles, lo que puede ayudar a simplificar el proceso de implementación.

Comments are closed.