viernes, 15 de julio de 2022

Unable to read data from the transport connection : An existing connection was forcibly closed by the remote host

 

Unable to read data from the transport connection : An existing connection was forcibly closed by the remote host


Tengo una aplicación de servidor y, a veces, cuando el cliente intenta conectarse, aparece el siguiente error:

Unable to read data from the transport connection : An existing connection was forcibly closed by the remote host

No se pudo obtener la transmisión del cliente o falló el inicio de sesión


Solución:

Después de la versión 4.6 de .NET, también me encontré con este problema.

Asegúrese de revisar su archivo web.config en busca de las siguientes líneas:

<compilation debug="true" targetFramework="4.5">

<httpRuntime targetFramework="4.5" />

Si está ejecutando 4.6.x o una versión superior de .NET en el servidor, asegúrese de ajustar estos valores de targetFramework para que coincidan con la versión del marco en su servidor. Si sus versiones leen menos de 4.6.x, le recomendaría que actualice .NET y use la versión más nueva, a menos que su código dependa de una versión anterior (que, en ese caso, debería considerar actualizarla).

Cambié targetFrameworks a 4.7.2 y el problema desapareció:


<compilation debug="true" targetFramework="4.7.2">

<httpRuntime targetFramework="4.7.2" />

sábado, 9 de julio de 2022

ASP.NET Web Forms: No 'Access-Control-Allow-Origin' header is present on the requested resource

 Es necesario configurar el web config:


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="Content-Type, soapaction" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

sábado, 25 de junio de 2022

InvalidOperationException: Unable to translate collection subquery in projection since the parent query doesn't project key columns of all of it's tables which are required to generate results on client side. This can happen when trying to correlate on keyless entity or when using 'Distinct' or 'GroupBy' operations without projecting all of the key columns.

 Este problema es uno de los cambios más importantes en EF Core 5.0. Algunas consultas con colección correlacionada que también usan Distinct o GroupBy ya no son compatibles.

Ya no se admiten algunas consultas con colecciones correlacionadas que también usan Distinct o GroupBy

Comportamiento anterior

Anteriormente, las consultas que implicaban colecciones correlacionadas seguidas de GroupBy, así como algunas consultas con Distinct que permitimos ejecutar.

Ejemplo de GroupBy:

C#
context.Parents
    .Select(p => p.Children
        .GroupBy(c => c.School)
        .Select(g => g.Key))

Ejemplo de Distinct: en concreto, las consultas Distinct en las que la proyección de la colección interna no contiene la clave principal:

C#
context.Parents
    .Select(p => p.Children
        .Select(c => c.School)
        .Distinct())

Estas consultas podrían devolver resultados incorrectos si la colección interna contuviera duplicados, pero funcionaría correctamente si todos los elementos de la colección interna fueran únicos.

Comportamiento nuevo

Estas consultas ya no son compatibles. Se produce una excepción que indica que no hay suficiente información para compilar los resultados correctamente.

Por qué

En el caso de los escenarios de colecciones correlacionadas, es necesario conocer la clave principal de la entidad para asignar entidades de colección al elemento primario correcto. Cuando la colección interna no utiliza GroupBy ni Distinct, la clave principal que falta se puede agregar simplemente a la proyección. Sin embargo, en el caso de GroupBy y Distinct, no se puede hacer porque cambiaría el resultado de la operación GroupBy o Distinct.

Mitigaciones

Vuelva a escribir la consulta para que no use las operaciones GroupBy o Distinct en la colección interna y, en su lugar, realice estas operaciones en el cliente.

C#
context.Parents
    .Select(p => p.Children.Select(c => c.School))
    .ToList()
    .Select(x => x.GroupBy(c => c).Select(g => g.Key))
C#
context.Parents
    .Select(p => p.Children.Select(c => c.School))
    .ToList()
    .Select(x => x.Distinct())

lunes, 20 de junio de 2022

URL Routing asp.net 4.8 Web Forms

mvc routing

Para implementar el enrutamiento de URL necesitaremos registrar las rutas que necesitamos usar en nuestra aplicación.

Para hacerlo,busca la clase RouteConfig ubicada en la carpeta App_Start:







Dentro del método RegisterRoutes, he utilizado el método MapPageRoute que acepta los siguientes tres parámetros.
1. routeName : Nombre de la Ruta. Debe ser único para cada ruta. Puede establecer cualquier nombre único, lo he llamado Clientes para una mejor comprensión.
2. routeUrl : la URL de la ruta que desea implementar. Por ejemplo, aquí queremos que NombresDetalle.aspx aparezca solo como NombresDetalle(sin la extensión .ASPX), por lo que esta personalización debe definirse aquí.

3. archivo físico : la URL de la página ASP.Net real a la que se debe redirigir la URL de la ruta. Para este ejemplo, es NombresDetalle.aspx.

 public static void RegisterRoutes(RouteCollection routes)
        {

            routes.MapPageRoute("NombresDetalle", "NombresDetalle/{NombreId}",        "~/NombreDetalle.aspx");
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }

En la pagina donde va invocar la llamada a la pagina detalle:

    <asp:HyperLinkColumn HeaderText = "Nombre" DataNavigateUrlFormatString = "~/NombresDetalle/{0}" DataNavigateUrlField="NombreId" DataTextField = "NombreId" />






Para obtener el paramatro mandado a la pagina detalle:
 public partial class NombreDetalle : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                NombreId.Text = this.Page.RouteData.Values["NombreId"].ToString();
            }
        }
    }


domingo, 19 de junio de 2022

No se puede utilizar .. inicial para salir por encima del directorio superior.


No se puede utilizar .. inicial para salir por encima del directorio superior.


 

El problema radica en las rutas relativas "../" de la master page:


Se tendrían que cambiar por rutas fijas o utilizar: "~/"



Cómo ver detalles completos de errores de ASP.NET, deshabilitar errores personalizados

 Cómo ver detalles completos de errores de ASP.NET, deshabilitar errores personalizados

Si su aplicación arroja errores, pero no puede ver el mensaje de error completo, puede deshabilitar customErrors.









Para hacer esto, querrá configurar el modo customErrors en "Off" como se muestra a continuación. Tenga cuidado, ya que esto podría exponer la información confidencial que se muestra en los mensajes de error, así como los seguimientos detallados de la pila. Esto no se recomienda a menos que no tenga otra opción y debe volver a cambiarlo lo antes posible.

<configuration>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

SQL Server Order by random, Ordenamiento aleatorio

 Order by random sql

Requiero ordenar una consulta de manera aleatoria, es decir que siempre me regrese un resultado diferente:











La función NEWIDdevuelve un uniqueidentifiertipo de datos que representa un GUID de 16 bytes. Por lo tanto, cada nuevo valor devuelto por la funciónNEWID será prácticamente único.


1
2
3
4
SELECT
    NombreId
FROM nombre
ORDER BY NEWID()