Cuando se realiza un llamado Ajax desde una página html (o .vm, o .aspx, etc), en realidad se está realizando una llamada CORS (Cross Origin Resource Sharing).
Esto es porque la invocación se realiza desde el equipo del usuario hacia un servidor (por ejemplo Xdesa).
Por defecto, y por cuestiones de seguridad, los llamados CORS no están habilitados, y si se realizan se genera una excepción con el texto "No Transport".
Para habilitar ejecuciones CORS, a partir de la versión 1.4.1 de jQuery es necesario realizar esta configuración:
jQuery.support.cors = true;
La versión previa a 1.4.1 (inclusive), no requiere este setting.
Error HTTP 500.19 - Internal Server Error (0x80070021)
Abrir un cmd como Administrador
Ir a C:\Windows\Microsoft.NET\Framework\v4.0.30319
ejecutar: aspnet_regiis -i
Error 0019: Each type name in a schema must be unique
Este error ocurre en Data Entity Framework cuando quedan versiones antiguas de las .dll's.
Es necesario borrar las .dll's de la carpeta dll de los siguientes proyectos:
DAL
Persistencia
Luego, recompilar DAL y Persistencia y luego la solución que las utilice.
Referencia: http://realnero.blogspot.com/2010/04/entity-framework-error-0019.html
Es necesario borrar las .dll's de la carpeta dll de los siguientes proyectos:
DAL
Persistencia
Luego, recompilar DAL y Persistencia y luego la solución que las utilice.
Referencia: http://realnero.blogspot.com/2010/04/entity-framework-error-0019.html
Sitio de IIS solicita usuario y password
Si un sitio web de IIS solicita usuario y password:
-Tener en cuenta que los sitios deben ser publicados dentro del Default Web Site
-Verificar que el sitio tenga su propio application pool
-Verificar que el usuario del application pool sea
.\usr_X
-Verificar que la configuración de Authentication para el sitio coincida con la siguiente:
-Tener en cuenta que los sitios deben ser publicados dentro del Default Web Site
-Verificar que el sitio tenga su propio application pool
-Verificar que el usuario del application pool sea
.\usr_X
-Verificar que la configuración de Authentication para el sitio coincida con la siguiente:
Unable to load the specified metadata resource
Unable to load the specified metadata resource
Este error ocurre cuando las rutas de Entity Framework definidas en el web.config no coinciden con las que contiene el ensamblado:
Los archivos involucrados en este problema son:
.csdl
.msl
.ssdl
Para averiguar qué rutas está utilizando la aplicación, se debe ir a la carpeta bin del sitio publicado, y analizar con reflection la .dll que corresponda al nombre del sitio (en este ejemplo, el sitio se llama CobTercerosWeb, por lo cual analizaremos el archivo CobTercerosWeb.dll)
Abrir el archivo con la aplicación ILSpy
Abrir la carpeta Resources
Los nombres de los archivos que allí aparecen deben coincidir con los que se referencien en el web.config (o app.config) de la aplicación.
En este caso, el problema radica en que la configuración establecida en el web.config difiere de la ubicación real de los archivos de recursos.
El archivo Web.config contiene lo siguiente:
<add name="cexofflineEntities" connectionString="metadata=res://*/CexOfflineEntities.csdl|res://*/CexOfflineEntities.ssdl|res://*/CexOfflineEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=Xdesa;initial catalog=cexoffline;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Fuente: http://www.ozkary.com/2012/10/unable-to-load-specified-metadata.html
Aplicación ILSpy: http://ilspy.net/
Los archivos involucrados en este problema son:
.csdl
.msl
.ssdl
Para averiguar qué rutas está utilizando la aplicación, se debe ir a la carpeta bin del sitio publicado, y analizar con reflection la .dll que corresponda al nombre del sitio (en este ejemplo, el sitio se llama CobTercerosWeb, por lo cual analizaremos el archivo CobTercerosWeb.dll)
Abrir el archivo con la aplicación ILSpy
Abrir la carpeta Resources
Los nombres de los archivos que allí aparecen deben coincidir con los que se referencien en el web.config (o app.config) de la aplicación.
En este caso, el problema radica en que la configuración establecida en el web.config difiere de la ubicación real de los archivos de recursos.
El archivo Web.config contiene lo siguiente:
<add name="cexofflineEntities" connectionString="metadata=res://*/CexOfflineEntities.csdl|res://*/CexOfflineEntities.ssdl|res://*/CexOfflineEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=Xdesa;initial catalog=cexoffline;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Mientras que los nombres de los archivos en el ensamblado son estos:
- ModelCexOffline.csdl
- ModelCexOffline.msl
- ModelCexOffline.ssdl
Hay dos posibles soluciones:
1. En este caso, la solución es cambiar en el web.config los nombres CexOfflineEntities por ModelCexOffline.
2. Volver a crear el .edmx en el proyecto pero con los nombres correctos.
Dado que uBuilder adapta los strings de conexión dependiendo del destino de la publicación, la opción 2 es la que debe adoptarse.
Aplicación ILSpy: http://ilspy.net/
Interfaz para Ambiloop looper con Arduino / controlar click, short hold y long hold sin debounce
Interfaz para ambiloop con Arduino
Dos botones. Se detectan click, short hold, long hold, controlando debounce.
Click del boton1: cambia de track
Click del boton2: comienza / detiene grabación en el track actual
Short hold del boton2: borra el track actual
Long hold del boton2: borra todos los tracks, y selecciona el track 1
Dos botones. Se detectan click, short hold, long hold, controlando debounce.
Click del boton1: cambia de track
Click del boton2: comienza / detiene grabación en el track actual
Short hold del boton2: borra el track actual
Long hold del boton2: borra todos los tracks, y selecciona el track 1
#define CLICK 1
#define SHORT 2
#define LONG 3
#define IDLE 0
const int buttonPin = 4;
int buttonState;
int lastButtonState = LOW;
const int button2Pin = 5;
int button2State;
int lastButton2State = LOW;
int estadoBoton1;
int estadoBoton2;
long lastDebounceTime = 0;
long debounceDelay = 30;
long tiempoIni, tiempoFin;
bool boton1ON, short1ON, long1ON;
long lastDebounceTime2 = 0;
long debounceDelay2 = 30;
long tiempoIni2, tiempoFin2;
bool boton2ON, short2ON, long2ON;
String tracks[8] = {"1", "2", "3", "4", "5", "6", "7", "8"};
int trackActual = 0;
void setup() {
pinMode(buttonPin, INPUT);
boton1ON = false;
short1ON = false;
long1ON = false;
estadoBoton1 = IDLE;
estadoBoton2 = IDLE;
}
void loop() {
bool boton1 = ValidarBoton1();
bool boton2 = ValidarBoton2();
switch (estadoBoton1)
{
case CLICK:
trackActual++;
if (trackActual > 8)
trackActual = 1;
Keyboard.print(tracks[trackActual-1]);
estadoBoton1 = IDLE;
break;
}
switch (estadoBoton2)
{
case CLICK:
Keyboard.print("r");
estadoBoton2 = IDLE;
break;
case SHORT:
Keyboard.print("e");
estadoBoton2 = IDLE;
break;
case LONG:
Keyboard.print("1e2e3e4e5e6e7e8e1 ");
trackActual = 1;
estadoBoton2 = IDLE;
break;
}
}
bool ValidarBoton1()
{
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
tiempoIni = millis();
while (buttonState == HIGH)
{
buttonState = digitalRead(buttonPin);
delay(1);
}
tiempoFin = millis();
if (tiempoFin - tiempoIni > 1500)
estadoBoton1 = LONG;
else if (tiempoFin - tiempoIni > 500)
estadoBoton1 = SHORT;
else
estadoBoton1 = CLICK;
}
}
}
lastButtonState = reading;
}
bool ValidarBoton2()
{
int reading2 = digitalRead(button2Pin);
if (reading2 != lastButton2State) {
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay2) {
if (reading2 != button2State) {
button2State = reading2;
if (button2State == HIGH) {
tiempoIni2 = millis();
while (button2State == HIGH)
{
button2State = digitalRead(button2Pin);
delay(1);
}
tiempoFin2 = millis();
if (tiempoFin2 - tiempoIni2 > 1500)
estadoBoton2 = LONG;
else if (tiempoFin2 - tiempoIni2 > 500)
estadoBoton2 = SHORT;
else
estadoBoton2 = CLICK;
}
}
}
lastButton2State = reading2;
}
#define SHORT 2
#define LONG 3
#define IDLE 0
const int buttonPin = 4;
int buttonState;
int lastButtonState = LOW;
const int button2Pin = 5;
int button2State;
int lastButton2State = LOW;
int estadoBoton1;
int estadoBoton2;
long lastDebounceTime = 0;
long debounceDelay = 30;
long tiempoIni, tiempoFin;
bool boton1ON, short1ON, long1ON;
long lastDebounceTime2 = 0;
long debounceDelay2 = 30;
long tiempoIni2, tiempoFin2;
bool boton2ON, short2ON, long2ON;
String tracks[8] = {"1", "2", "3", "4", "5", "6", "7", "8"};
int trackActual = 0;
void setup() {
pinMode(buttonPin, INPUT);
boton1ON = false;
short1ON = false;
long1ON = false;
estadoBoton1 = IDLE;
estadoBoton2 = IDLE;
}
void loop() {
bool boton1 = ValidarBoton1();
bool boton2 = ValidarBoton2();
switch (estadoBoton1)
{
case CLICK:
trackActual++;
if (trackActual > 8)
trackActual = 1;
Keyboard.print(tracks[trackActual-1]);
estadoBoton1 = IDLE;
break;
}
switch (estadoBoton2)
{
case CLICK:
Keyboard.print("r");
estadoBoton2 = IDLE;
break;
case SHORT:
Keyboard.print("e");
estadoBoton2 = IDLE;
break;
case LONG:
Keyboard.print("1e2e3e4e5e6e7e8e1 ");
trackActual = 1;
estadoBoton2 = IDLE;
break;
}
}
bool ValidarBoton1()
{
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
tiempoIni = millis();
while (buttonState == HIGH)
{
buttonState = digitalRead(buttonPin);
delay(1);
}
tiempoFin = millis();
if (tiempoFin - tiempoIni > 1500)
estadoBoton1 = LONG;
else if (tiempoFin - tiempoIni > 500)
estadoBoton1 = SHORT;
else
estadoBoton1 = CLICK;
}
}
}
lastButtonState = reading;
}
bool ValidarBoton2()
{
int reading2 = digitalRead(button2Pin);
if (reading2 != lastButton2State) {
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay2) {
if (reading2 != button2State) {
button2State = reading2;
if (button2State == HIGH) {
tiempoIni2 = millis();
while (button2State == HIGH)
{
button2State = digitalRead(button2Pin);
delay(1);
}
tiempoFin2 = millis();
if (tiempoFin2 - tiempoIni2 > 1500)
estadoBoton2 = LONG;
else if (tiempoFin2 - tiempoIni2 > 500)
estadoBoton2 = SHORT;
else
estadoBoton2 = CLICK;
}
}
}
lastButton2State = reading2;
}
Arduino Leonardo keyboard
Fuentes:
https://www.arduino.cc/en/Tutorial/KeyboardMessage
https://www.arduino.cc/en/Tutorial/Debounce
const int buttonPin = 4;
int ledState = HIGH;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
}
}
}
if (ledState == HIGH)
{
Keyboard.print("1");
ledState = LOW;
}
lastButtonState = reading;
}
Suscribirse a:
Comentarios (Atom)

