<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://leonartapps.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
¿Por qué aguardas con impaciencia las cosas? Si son inútiles para tu vida, inútil es también aguardarlas. Si son necesarias, ellas vendrán y vendrán a tiempo. Amado Nervo
miércoles, 28 de diciembre de 2016
ASP.NET: app.config
Agregar esto en el web.config cuando vamos a publicar en definitivo un sitio web:
viernes, 29 de julio de 2016
lunes, 18 de mayo de 2015
SQL SERVER: Validar si existe columna en una tabla
if NOT exists(select * from sys.columns
where Name = N'ColumnaA' and Object_ID = Object_ID(N'Tabla'))
begin
ALTER TABLE [dbo].[Tabla] ADD [ColumnaA] int NULL;
end
else
begin
Print 'La columna ColumnaA ya existe en la tabla Tabla.'
end
SQL SERVER: Borrar procedimiento almacenado de forma segura
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'NOMBRE_PROC') AND type IN ( N'P', N'PC' ))
begin
drop PROCEDURE [dbo].[NOMBRE_PROC]
end
GO
CREATE dbo.NOMBRE_PROC
(...).....
begin
drop PROCEDURE [dbo].[NOMBRE_PROC]
end
GO
CREATE dbo.NOMBRE_PROC
(...).....
domingo, 3 de mayo de 2015
MSDTC y .Net: MSDTC no está disponible en el servidor 'X'.
El error que indica que el Microsoft Distributed Transaction Coordinator no está disponible puede significar a que debemos configurarlo, de esta manera ya no recibimos el mensaje de error en .Net cuando utilizamos TransactionScope.
1º En ventana de ejecución poner: comexp.msc
2º Expanda Servicios de componentes, equipos, Mi PC, Administrador de transacciones distribuidas, haga DTC Localy, a continuación, haga clic en Propiedades.
3º En el tab Segumiento puede activar "Seguimiento de todas las trasacciones".
1º En ventana de ejecución poner: comexp.msc
2º Expanda Servicios de componentes, equipos, Mi PC, Administrador de transacciones distribuidas, haga DTC Localy, a continuación, haga clic en Propiedades.
3º En el tab Segumiento puede activar "Seguimiento de todas las trasacciones".
sábado, 2 de mayo de 2015
Sql Server: Eliminar usuario de base de datos.
Para realizar esta tarea lo mejor es estar logueado con otro usuario con privilegios y talvez pueda ser necesario reiniciar el servicio de SQL Server para cancelar todas las posibles conexiones a la bases de datos asociadas al usuario que queremos eliminar. Comandos SQL para eliminar usuario de una base de datos:
1º Averiguar a cuáles esquemas pertenece el usuario:
SELECT name FROM sys.schemas WHERE principal_id = USER_ID('usuarioPruebas')
2º Con la lista anterior, se reemplaza en esta siguiente consulta la palabra SchemaName, por el verdadero nombre del esquema para eliminar al usuario totalmente:
ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo
GO
DROP USER usuarioPruebas
1º Averiguar a cuáles esquemas pertenece el usuario:
SELECT name FROM sys.schemas WHERE principal_id = USER_ID('usuarioPruebas')
2º Con la lista anterior, se reemplaza en esta siguiente consulta la palabra SchemaName, por el verdadero nombre del esquema para eliminar al usuario totalmente:
ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo
GO
DROP USER usuarioPruebas
martes, 30 de diciembre de 2014
SQL SERVER: Consultas recursivas
Esta técnica sirve para conocer los registros hijos en forma recursiva. También puede funcionar en tablas que se referencian a si mismas siempre y cuando se apliquen los ajustes en las consultas.
Case 1
| Employee ID | Name | Supervisor ID |
| 001 | Paroar Habib | Null |
| 002 | Sumon Mazumder | 001 |
| 003 | Kalim Uddin | 001 |
| 004 | Jewel Ahmed | 002 |
Case 2
| vmenuid | vmenuname | vparent |
| M001 | HR System | Null |
| M002 | Payroll | M001 |
| M003 | Salary Benefits | M002 |
| M004 | Recruitment | M001 |
Aplicando la consulta:
WITH security_menu_Recursive(Parent,MenuId,MenuName,LEVEL)
AS
(
SELECT vparent,vmenuid,vmenuname,0 AS LEVEL FROM dbo.SecurityMenu WHERE vParent = null
UNION ALL
SELECT vparent,vmenuid,vmenuname,Level + 1 AS LEVEL FROM dbo.SecurityMenu
INNER JOIN security_menu_Recursive AS smr ON smr.menuid = dbo.SecurityMenu.vParent
)
SELECT parent,menuid,menuname,LEVEL FROM security_menu_Recursive
Resultado:
| Parent | MenuID | MenuName | Level |
| Null | M001 | HR System | 0 |
| M001 | M002 | Payroll | 1 |
| M001 | M004 | Recruitment | 1 |
| M002 | M003 | Salary Benefits | 2 |
Ejemplo completo en codeproject.com
sábado, 20 de septiembre de 2014
VS2012: Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012
Sitio para descargar Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2012
Con esta herramienta se pueden ver los reportes de Reporting Services en la versión de Visual Studio 2012. Solo basta con abrir una ventana individual de proyecto de reportes y listo, haga doble clic al reporte para verlo en modo diseño.
Con esta herramienta se pueden ver los reportes de Reporting Services en la versión de Visual Studio 2012. Solo basta con abrir una ventana individual de proyecto de reportes y listo, haga doble clic al reporte para verlo en modo diseño.
sábado, 25 de enero de 2014
jQuery: método val() vs text()
En ocasiones uno quiere establecer un texto a un span utilizando jQuery, pero por aguna razón no funciona, veamos un ejemplo:
Código HTML:
<span>Hola Mundo!!!</span>
<script>
$('span').val('Hola Mundo!!!');
</script>
Y uno se queda pensando, por qué rayos no aparece el texto en el span?, y esa pregunta se la repite uno un buen rato!
La respuesta del por qué no aparece el texto en el span es porque el span no tiene el atributo value. Hay que recordar una cosa y es que todos los elementos HTML si tienen los mismos atributos pero es solo un conjunto de atributos, muy conocidos por cierto!. Se les conoce como "Global Attributes". Ejemplo de atributos globales pueden ser: id, style, class, lang, title, etc. Sin embargo existen otros tipos de atributos únicos para algunos elementos.
En HTML existe el concepto de "Content Model", se refiere al contenido que pueden tener los elementos de HTML. El contenido de un elemento puede ser:
En HTML también existen dos tipos de elementos según el modelo de contenido que pueden manejar:
El elemento span del ejemplo inicial, es un elemento normal con etiqueta de inicio y final y el contenido que puede manejar un span va entre ambas etiquetas. En cambio un elemento input es un elemento que no puede contener datos y eso se debe a que el elemento input es un elemento único o singular, no está hecho para encerrar texto u otros elementos.
Un elemento <input> está hecho para formularios, y tiene varias formas de presentación como por ejemplo una casilla de verificación, un botón de radio, un control escondido (hidden), un cuadro de texto, password, file, un botón, etc.
Un span no tiene el atributo "value" en cambio un input si lo tiene. He ahí la diferencia del por qué con la propiedad val() de jQuery no se puede establecer un texto para el elemento span.
En jQuery existen formas para asignar texto a un elemento y una de ellas es utilizando el método val(), text() o html(). Lo que caracteriza a cada uno de esos métodos es lo siguiente:
val() ==> Modifica el valor del atributo "value" de todos los elementos que tengan el atributo "value". Los elementos que tienen el atributo value son: input, option, param, button, li.
Código:
<input id="inputEjemplo" type="text" value="" />
$("#inputEjemplo").val("Hola mundo!!!")
Resultado:
<input id="inputEjemplo" type="text" value="" />
text() ==> Modifica el valor de contenido que pueden encerrar todos los elementos que poseen etiqueta de cierre. El texto que se asigna es texto plano (text plain) por lo que si esperamos poner texto formateado con color, tamaño, etc, no es posible.
Código:
<span id="ejemplo"></span>
$("#ejemplo").text("<b>Hola mundo!!!</b>")
Resultado:
Hola mundo!!!
html() ==> Modifica el valor de contenido que pueden encerrar todos los elementos que poseen etiqueta de cierre. El texto que se asigna puede ser texto plano o texto en formato html.
Código:
<span id="ejemplo"></span>
$("#ejemplo").html("<b>Hola mundo!!!</b>")
Resultado:
Hola mundo!!!
Código HTML:
<span>Hola Mundo!!!</span>
<script>
$('span').val('Hola Mundo!!!');
</script>
Y uno se queda pensando, por qué rayos no aparece el texto en el span?, y esa pregunta se la repite uno un buen rato!
La respuesta del por qué no aparece el texto en el span es porque el span no tiene el atributo value. Hay que recordar una cosa y es que todos los elementos HTML si tienen los mismos atributos pero es solo un conjunto de atributos, muy conocidos por cierto!. Se les conoce como "Global Attributes". Ejemplo de atributos globales pueden ser: id, style, class, lang, title, etc. Sin embargo existen otros tipos de atributos únicos para algunos elementos.
En HTML existe el concepto de "Content Model", se refiere al contenido que pueden tener los elementos de HTML. El contenido de un elemento puede ser:
- caracteres de datos.
- comentarios.
- otros elementos html.
En HTML también existen dos tipos de elementos según el modelo de contenido que pueden manejar:
- elementos con etiquetas de inicio y final. Como por ejemplo: p, div, b, table, span, etc.
- elementos únicos, son elementos que no tienen un elemento de cierre: input, link, meta, img.
El elemento span del ejemplo inicial, es un elemento normal con etiqueta de inicio y final y el contenido que puede manejar un span va entre ambas etiquetas. En cambio un elemento input es un elemento que no puede contener datos y eso se debe a que el elemento input es un elemento único o singular, no está hecho para encerrar texto u otros elementos.
Un elemento <input> está hecho para formularios, y tiene varias formas de presentación como por ejemplo una casilla de verificación, un botón de radio, un control escondido (hidden), un cuadro de texto, password, file, un botón, etc.
Un span no tiene el atributo "value" en cambio un input si lo tiene. He ahí la diferencia del por qué con la propiedad val() de jQuery no se puede establecer un texto para el elemento span.
En jQuery existen formas para asignar texto a un elemento y una de ellas es utilizando el método val(), text() o html(). Lo que caracteriza a cada uno de esos métodos es lo siguiente:
val() ==> Modifica el valor del atributo "value" de todos los elementos que tengan el atributo "value". Los elementos que tienen el atributo value son: input, option, param, button, li.
Código:
<input id="inputEjemplo" type="text" value="" />
$("#inputEjemplo").val("Hola mundo!!!")
Resultado:
<input id="inputEjemplo" type="text" value="" />
text() ==> Modifica el valor de contenido que pueden encerrar todos los elementos que poseen etiqueta de cierre. El texto que se asigna es texto plano (text plain) por lo que si esperamos poner texto formateado con color, tamaño, etc, no es posible.
Código:
<span id="ejemplo"></span>
$("#ejemplo").text("<b>Hola mundo!!!</b>")
Resultado:
Hola mundo!!!
html() ==> Modifica el valor de contenido que pueden encerrar todos los elementos que poseen etiqueta de cierre. El texto que se asigna puede ser texto plano o texto en formato html.
Código:
<span id="ejemplo"></span>
$("#ejemplo").html("<b>Hola mundo!!!</b>")
Resultado:
Hola mundo!!!
viernes, 3 de enero de 2014
JQuery: Tomar fecha de un control Datepicker y devolverla en otro formato!
Tomar la fecha del control datepicker y
posteriormente presentarla en pantalla en el formato deseado. Se usa el método $.datepicker.formatDate para convertir la fecha en otro formato.
//Obtener
la fecha del control datepicker.
var
fecha = $('#txtFechaNacimiento').datepicker('getDate');
//Mostrar
la fecha en un formato deseado, en este caso queremos año-mes-día.
alert($.datepicker.formatDate('yy-mm-dd',
fecha))
Se pueden crear muchos formatos combinando diferentes literales. En la página oficial del control Datepicker se explica mejor los tipos de formatos. La lista de literales que se pueden usar son:
Se pueden crear muchos formatos combinando diferentes literales. En la página oficial del control Datepicker se explica mejor los tipos de formatos. La lista de literales que se pueden usar son:
- d - day of month (no leading zero)
- dd - day of month (two digit)
- o - day of year (no leading zeros)
- oo - day of year (three digit)
- D - day name short
- DD - day name long
- m - month of year (no leading zero)
- mm - month of year (two digit)
- M - month name short
- MM - month name long
- y - year (two digit)
- yy - year (four digit)
- @ - Unix timestamp (ms since 01/01/1970)
- ! - Windows ticks (100ns since 01/01/0001)
- '...' - literal text
- '' - single quote
- anything else - literal text
domingo, 15 de diciembre de 2013
WCF: Bad request? - Dos razones por las cuales ocurre.
Una razón por la cual un servicio responde con la famosa respuesta "Bad Request" es porque un nombre de parámetro en el lado del cliente no tiene el mismo nombre que el nombre del parámetro en la definición del contrato.
Otra razón es el valor de los parámetros que se están pasando al servicio. Si en el lado del cliente el parámetro Edad se pasa con valor -1 pero en el lado del servidor ese parámetro es de tipo Byte, se produce el error y con buena razón. Entonces a revisar también los valores que se pasan por parámetro!
Otra razón es el valor de los parámetros que se están pasando al servicio. Si en el lado del cliente el parámetro Edad se pasa con valor -1 pero en el lado del servidor ese parámetro es de tipo Byte, se produce el error y con buena razón. Entonces a revisar también los valores que se pasan por parámetro!
jueves, 12 de diciembre de 2013
Obtener una página web usando $.get de jquery
Ejemplo:
$.get("rutapagina.html", function (data) {
//callback function
});
$.get("rutapagina.html", function (data) {
//callback function
});
domingo, 29 de septiembre de 2013
VirtualBox: Corregir problema con UUID para reutilizar discos virtuales.
Un compañero me preguntó si había usado la opción de clonado en VirtualBox ya que ocupaba un sistema limpio varias veces, sin embargo no pudo porque le aparecía el siguiente error:
Resulta que sí me ocurrió ese error una vez, de hecho la opción de clonado no es necesario que la utilice para lo que él quería hacer porque tarda horas en clonarse. Lo más fácil es utilizar un comando para cambiar el UUID (identificador universal único).
En linux:
VBoxManage internalcommands setvdiuuid /path/to/Test.vdi
En Windows:
C:\Program Files\Oracle\VirtualBox\VBoxManage.exe internalcommands sethduuid "D:\Virtual Disks\Test\Test.vdi"
Resulta que sí me ocurrió ese error una vez, de hecho la opción de clonado no es necesario que la utilice para lo que él quería hacer porque tarda horas en clonarse. Lo más fácil es utilizar un comando para cambiar el UUID (identificador universal único).
En linux:
VBoxManage internalcommands setvdiuuid /path/to/Test.vdi
En Windows:
C:\Program Files\Oracle\VirtualBox\VBoxManage.exe internalcommands sethduuid "D:\Virtual Disks\Test\Test.vdi"
domingo, 2 de junio de 2013
Javascript: Cómo obtener los objetos vinculados al objeto window dentro de un iframe
Utilizando JQuery o javascript:
$('#iframeName').get(0).contentWindow.window
$('#iframeName')[0].contentWindow.window
document.getElementById('iframeName').contentWindow.window
Con cualquiera de las sentencias anteriores se logra obtener referencia a un objeto creado por un usuario o referenciar los objetos hijos de window. Ejemplo:
document.getElementById('iframeName').contentWindow.window.document
$('#iframeName').get(0).contentWindow.window
$('#iframeName')[0].contentWindow.window
document.getElementById('iframeName').contentWindow.window
Con cualquiera de las sentencias anteriores se logra obtener referencia a un objeto creado por un usuario o referenciar los objetos hijos de window. Ejemplo:
document.getElementById('iframeName').contentWindow.window.document
sábado, 25 de mayo de 2013
Javascript: Copiar texto en portapapeles en IE
Código para poder copiar datos en el portapapeles del sistema operativo. Válido solo en IE:
var content = document.getElementById('txtHiddenCopyUrl');
content.focus();
content.select();
range = content.createTextRange();
range.execCommand("Copy");
window.status = "Contents copied to clipboard";
setTimeout("window.status=''", 1800);
El caso anterior sirve por ejemplo si tenemos un textarea, en otros casos podemos copiar directamente en el portapapeles usando solo una línea de código:
window.clipboardData.setData("Text", variableWithText);
donde variableWithText es una variable que contiene el texto para copiar en el portapaples.
var content = document.getElementById('txtHiddenCopyUrl');
content.focus();
content.select();
range = content.createTextRange();
range.execCommand("Copy");
window.status = "Contents copied to clipboard";
setTimeout("window.status=''", 1800);
El caso anterior sirve por ejemplo si tenemos un textarea, en otros casos podemos copiar directamente en el portapapeles usando solo una línea de código:
window.clipboardData.setData("Text", variableWithText);
donde variableWithText es una variable que contiene el texto para copiar en el portapaples.
miércoles, 3 de abril de 2013
HTML - Atributo Complete para el elemento img
Hoy ví que una compañera tenía en un elemento IMG el atributo "complete", lo cuál se me hizo muy extraño, hasta le dije que no lo usara. Como siempre me quedé con la duda y lo investigué. Resulta que ese atributo si existe pero solo en el BOM (Browser Object Model), o sea, que los navegadores de internet si reconocen dicho atributo para el elemento IMG.
Yo me acuerdo más del DOM al punto que investigando en las revisiones de la W3C, no mencionan por ninguna parte al atributo "complete".
Encontré una referencia que dice que para HTML5 ese atributo si va a estar definido, pero no lo he comprobado.
Para que sirve el atributo "complete" en el elemento img?
Se usa únicamente para saber si la imagen ya se cargó completamente. Es un atributo de solo lectura y esto quiere decir que no se le puede asignar un valor, lo máximo que se puede hacer es consultar su estado utilizando javascript.
Es inválido poner: <img id="miEjemplo" complete="complete" />
Es inválido porque "complete" es de solo lectura y en el ejemplo anterior se le está asignando un valor, además el valor que puede o se espera que tenga debe ser de tipo booleano true|false.
Cuando un uri no existe, se devuelve internamente el código de estado 404. Si una imagen no existe aun así en el atributo "complete" queda el valor true tanto en Chrome como Firefox, lo cual se me hace algo extraño, en cambio IE el atributo si queda en false.
uri = uniform resource identifier / identificador uniforme de recurso / es un recurso como una imgen por ejemplo, algo específico.
Yo me acuerdo más del DOM al punto que investigando en las revisiones de la W3C, no mencionan por ninguna parte al atributo "complete".
Encontré una referencia que dice que para HTML5 ese atributo si va a estar definido, pero no lo he comprobado.
Para que sirve el atributo "complete" en el elemento img?
Se usa únicamente para saber si la imagen ya se cargó completamente. Es un atributo de solo lectura y esto quiere decir que no se le puede asignar un valor, lo máximo que se puede hacer es consultar su estado utilizando javascript.
Es inválido poner: <img id="miEjemplo" complete="complete" />
Es inválido porque "complete" es de solo lectura y en el ejemplo anterior se le está asignando un valor, además el valor que puede o se espera que tenga debe ser de tipo booleano true|false.
Cuando un uri no existe, se devuelve internamente el código de estado 404. Si una imagen no existe aun así en el atributo "complete" queda el valor true tanto en Chrome como Firefox, lo cual se me hace algo extraño, en cambio IE el atributo si queda en false.
uri = uniform resource identifier / identificador uniforme de recurso / es un recurso como una imgen por ejemplo, algo específico.
JQuery - Formas para obtener la altura del contenido en un IFrame
Funciona correctamente, por desgracia en IE 9 Y 8 vamos a tener problemas ya que siempre retorna el valor 0:
var iframeSize = $('#myIFrame').contents().find('body').height();
Otra vez jquery me ayudó con una línea de código que aunque en el ejemplo que ví, no era lo mismo que me estaba ocurriendo, de bataso ví que basta con poner lo siguiente para obtener la altura aproximada del contenido del iFrame:
var iframeSize = $('#myIFrame').contents().height();
Ambas líneas son aceptables, pero como siempre en IE lo que parece lógico que sirva, no siempre es así.
Ser precavido, el iframe para mi caso no tenía el atributo height establecido, por lo que la altura default viene siendo cero y cambia hasta que se agrega contenido al iframe. CSS también entra en juego en estos casos, por lo que recomiendo tener en mente cualquier estilo que afecte las dimensiones del iframe.
var iframeSize = $('#myIFrame').contents().find('body').height();
Otra vez jquery me ayudó con una línea de código que aunque en el ejemplo que ví, no era lo mismo que me estaba ocurriendo, de bataso ví que basta con poner lo siguiente para obtener la altura aproximada del contenido del iFrame:
var iframeSize = $('#myIFrame').contents().height();
Ambas líneas son aceptables, pero como siempre en IE lo que parece lógico que sirva, no siempre es así.
Ser precavido, el iframe para mi caso no tenía el atributo height establecido, por lo que la altura default viene siendo cero y cambia hasta que se agrega contenido al iframe. CSS también entra en juego en estos casos, por lo que recomiendo tener en mente cualquier estilo que afecte las dimensiones del iframe.
sábado, 16 de marzo de 2013
Javascript - Cómo obtener un elemento específico del DOM donde la fuente es una cadena
Tenemos en una variable una cadena de un documento HTML o en un servicio que devuelve un string de html y queremos filtrarlo solo para obtener únicamente el contenido del elemento HEAD, podemos aplicar el siguiente script:
O por ejemplo para obtener el contenido del elemento body:
Lo mismo pero utilizando expresiones regulares:
Es mejor usar la expresión regular ya que en los flags se indica case-insensitive.
Ahora podemos llenar las dos secciones de un iframe, tanto el head como el body con un string de tipo HTML:
$('#myIframe').contents().find('head').html(head); $('#myIframe').contents().find('body').html(body);
var head = txt.split("<head")[1]
.split(">")
.slice(1)
.join(">")
.split("</head>")[0];
O por ejemplo para obtener el contenido del elemento body:
var body = txt.split("<body")[1]
.split(">")
.slice(1)
.join(">")
.split("</body>")[0];
Lo mismo pero utilizando expresiones regulares:
var head = txt.match(/<(.*|\n*|\t*|(\r\n)*)head(.*|\n*|\t*|(\r\n)*)>
(.|\n|\t|\r\n)*<(.*|\n*|\t*|(\r\n)*)\/(.*|\n*|\t*
|(\r\n)*)head(.*|\n*|\t*|(\r\n)*)>$/gim);
var body = txt.match(/<(.*|\n*|\t*|(\r\n)*)body(.*|\n*|\t*|(\r\n)*)>
(.|\n|\t|\r\n)*<(.*|\n*|\t*|(\r\n)*)\/(.*|\n*|\t*
|(\r\n)*)body(.*|\n*|\t*|(\r\n)*)>$/gim);
Es mejor usar la expresión regular ya que en los flags se indica case-insensitive.
Ahora podemos llenar las dos secciones de un iframe, tanto el head como el body con un string de tipo HTML:
$('#myIframe').contents().find('head').html(head); $('#myIframe').contents().find('body').html(body);
martes, 13 de diciembre de 2011
Asp.Net: Recuperar un valor de una celda del GridView
Una forma de recuperar un valor de una celda en el control GridView:
Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim precio As Single
precio = DataBinder.Eval(e.Row.DataItem, "precio")
If precio > 5 Then
e.Row.ForeColor = System.Drawing.Color.Red
e.Row.BackColor = System.Drawing.Color.Yellow
e.Row.Font.Bold = True
End If
End If
End Sub
domingo, 22 de mayo de 2011
WCF: Temario para el examen de certificación 70-513 WCF de Microsoft
A continuación pongo el enlace oficial con todos los temas que hay que estudiar para el Examen de WCF con Microsoft .Net Framework 4.0. (70-513) (¡Rayos!, hubiera comenzado buscando esto primero, jeje!)
El link es: WCF Framework 4.0
Otro enlace: http://www.jamesjfoster.com/blog/2010/resource-links-for-70-513-wcf-certification-exam/
El link es: WCF Framework 4.0
Otro enlace: http://www.jamesjfoster.com/blog/2010/resource-links-for-70-513-wcf-certification-exam/
Suscribirse a:
Entradas (Atom)


