Se debe dar clic derecho sobre Refences o sobre el proyecto:
Con esto se muestra la siguiente pantalla:
Podemos poner el link del WS en el primer recuadro, sin embargo si vamos a consumir desde un framework 2.0 debemos dar clic en el botón Advanced... que está al final de la imagen, con esto se muestra una nueva ventana.
Y nuevamente clic en el botón Add Web Reference... que se encuentra al final de la ventana.
En esta pantalla ponemos el link del WS. El We reference name se lo puede cambiar (yo lo deje igual) y dar clic en Add Reference.
//esta es una instancia de la referencia del WS y Calculator lo puedes encontrar en el WSDL description <wsdl:servicename="Calculator"> o si en VS poner ver todos lo archivos vas a ver que bajo la rerefencia esta el .disco y .wsdl
Una opción es escribir
por medio de una función el código html tal como necesite el javascript
que vayamos a utilizar, la otra es crear un control de usuario que nos
evite esto.
En el ejemplo se lee varias IDs desde un WebService y estos se envían a un manejador ashx el cual nos retorna las imágenes (context.Response.ContentType = "image/jpeg";) correspondientes a cada ID.
En el aspx ponemos a partir de la segunda linea
<%@ Register src="~/ucontrol/WebUserControl.ascx" TagName="WebUserControl" TagPrefix="ucPersonal" %>
Donde src es la ruta donde se contruyo el control de usuario, luego en el html:
Recordando que un Html Helper se traduce en código html cuando
se muestra en una página podemos crear un control personalizado dándolo
la funcionalidad que necesitamos con ayuda de javascript por ejemplo e
incluso css.
Para esto debemos crear una página estática y dentro de
esta los métodos que necesitemos, luego de esto se debe modificar el
archivo Views>Shared>Web.config para agregar el Namespace de la
nueva clase para poder hacer uso del Helper desde las Vistas.
El nuevo Helper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
namespace MvcInventarioEquipos.App_Code
{
publicstaticclassHtmlExtensions
{
///<summary>/// Caja de texto con formateo del texto///</summary>///<typeparam name="TModel"></typeparam>///<typeparam name="TProperty"></typeparam>///<param name="htmlHelper"></param>///<param name="expression"></param>///<param name="transformacion">U (upper), L (lower), C (capitalize)</param>///<returns></returns>publicstaticMvcHtmlString nDeveloperTextBox<TModel, TProperty>(thisHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string transformacion)
{
var body = expression.Body;
string nombreElemento = string.Empty;
string opcionStyle = string.Empty;
string opcionJS = string.Empty;
if ((body asMemberExpression) != null)
{
nombreElemento = (body asMemberExpression).Member.Name;
}
var valorMetaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
string valorInput = valorMetaData.SimpleDisplayText;
switch (transformacion.ToUpper())
{
case"U":
opcionJS = "this.value.toUpperCase();";
opcionStyle = "uppercase";
break;
case"L":
opcionJS = "this.value.toLowerCase();";
opcionStyle = "lowercase";
break;
case"C":
opcionJS = "this.value.charAt(0).toUpperCase() + this.value.substring(1).toLowerCase();";
opcionStyle = "none";
break;
default:
opcionJS = "null";
opcionStyle = "none";
break;
}
string html = string.Format("<input class=\"text-box single-line\" id=\"{0}\" name=\"{0}\" type=\"text\" value=\"{1}\" style=\"text-transform:{2};\" onblur=\"javascript:this.value={3}\"/>", nombreElemento, valorInput, opcionStyle, opcionJS);
returnMvcHtmlString.Create(html);
}
}
}
Cuando se consume un servicio web, existen dos maneras de referenciarlo, una es añadiendo un Web Reference y la otra es añadiendo un Service Reference, esta ultima opción esta presente desde VS2008.
Una de las diferencias entre las dos formas de referenciar es la
aparición de campos/miembros extras con la estructura de nombre:
NombreCampoSpecified del tipo booleano.
Algo de código:
Al revisar los archivos reference que se generan al crear la referencia podemos notar lo siguiente:
· Web Reference
Se genera un miembro extra con la palabra Specified al final.
Código fuente del cliente:
· Service Reference
Aqui no exiete el problema.
Código fuente del cliente:
Dos maneras prácticas de evitar esto cuando se trabaja con Web Reference son:
Cuando no se tiene control del Servicio Web.
Para que el dato se pase al servidor, en el cliente se debe asignar el valor true a la variable extra:
2. Cuando si se tiene control del Servicio Web.-
Se puede aplicar lo anterior del lado del cliente o se debe
modificar el esquema en el servidor donde este definido el campo del
que se genera la variable extra:
Se debe cambiar el valor de IsRequired a true.
Con esto al volver a generar ya no aparecera la variable extra en el cliente:
Al crear un proyecto MVC4 se generan la estructura general de este, uno de los archivos creados es
_Layout.cshtml que se encuentra dentro de Views > Shared.
Al final de este archivo se encuentran líneas que interactúan con BundleConfig.cs