Hoy he podido pasar un “agradable” rato buscando un problema en un WSDL de 3200 lineas para conectarme a un servicio web de SAP. Este pequeño post es más que nada un recordatorio. Al intentar generar un proxy tanto desde Visual Studio como desde las herramientas wsdl.exe o svcutil.exe, obtenía mensajes de error un tanto crípticos.
Corriendo esta linea
wsdl “D:\WSDLs\Vendor Exists\XI_VENDOR_EXISTS.wsdl” /l:c# /v /o:proxy.cs /parsableerrors
obtenia esto
Error: There is an error in XML document (3170, 16).
- Value cannot be null.
Parameter name: name
Bonito eh? Lo mismo con
svcutil “D:\WSDLs\Vendor Exists\XI_VENDOR_EXISTS.wsdl” /out:proxy.cs
y desde Visual Studio
The document at the url file:///D:/Projects/Tests/ConsoleApplication1/ConsoleApplication1/MI_Vendor_Exists.wsdl was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from ‘DISCO Document’ is ‘Discovery document at the URL file:///D:/Projects/Tests/ConsoleApplication1/ConsoleApplication1/MI_Vendor_Exists.wsdl could not be found.’.
- The document format is not recognized.
- Report from ‘WSDL Document’ is ‘There is an error in XML document (2, 80660).’.
- Value cannot be null.
Parameter name: name
- Report from ‘XML Schema’ is ‘The root element of a W3C XML Schema should be and its namespace should be ‘http://www.w3.org/2001/XMLSchema’.’.
Al final, nada que ver con las lineas indicadas ni con el discovery ni nada. Simeplemente un par de espacios en dos lineas como esta
<xsd:union memberTypes=" xsd:time genericTime" ...
El espacio entre la comilla y xsd es el culpable. Viendolo en retrospectiva parece fácil entender el mensaje de error de “value cannot be null,” pero hasta que se da con ello y se te ocurre buscar anomalías…. Incluso XML Spy no supo tampoco hacer nada. El caso es que creo que esto ya me ha pasado alguna vez, pero ya se sabe, dos veces la misma piedra, y tres y cuatro.
Saludos
Sin duda uno de los mejores temas de drum n’ bass de la historia además de un video está entre los más emotivos que haya visto nunca, merece estar al lado de la gran Sinead. Maravilloso, Mistabishi.
en The Register publican los resultados de un interesante estudio forénsico sobre el porqué la predominancia de mercado de Baidu, la piratería musical, las diferencias o competencia desleal a la hora de competir en el mercado de internet chino, la falta de neutralidad / escrúpulos, etc. Merece la pena echar un vistazo al estudio.
El artículo deja bien claro una sensación que yo creo que está muy extendida y de la que se habla menos de lo que se debería, y es la absoluta falta de transparencia e igualdad de condiciones a la hora de competir en el mercado chino, tremendamente intervenido por el gobierno cuyos aliados pueden operar con total impunidad incluso dentro de la ilegalidad, mientras que otros competidores tienen que saltar trabas y cumplir regulaciones exigentes y excesivas como si se tratase de un país muy puntilloso con la legalidad, las auditorías y la calidad. Es evidente que queda un larguísimo camino para convencer a China de algunas de las premisas básicas del libre mercado.
Curioso que a la vez se trate de una empresa listada en el índice Nasdaq y en la cual invierten, y obtienen beneficios por publicidad, numerosas empresas occidentales. Como mínimo, y dejando de lado temas legales, se demuestra el crecimiento y progresiva complicación de los lazos globales entre mercados y empresas y el flujo del capital, cada vez más difícil de seguir.
Recientemente he tenido que hacer algunas customizaciones para MOSS con jQuery, y he acabado conociendo la existencia de una interesante librería que combina ambos mundos. Es la jQuery Library for SharePoint Web Services que podemos encontrar en CodePlex.
La descripción lo dice todo:
This is a jQuery library which abstracts SharePoint’s Web Services and makes them easier to use. It also includes functions which use the various Web Service operations to provide more useful (and cool) capabilities. It works entirely client side and requires no server install.
Una herramienta muy interesante a tener en cuenta en el futuro.
La programación funcional cada vez va ganando más importancia…es de sobra hora de irse familiarizando con los conceptos y las técnicas, así que viene perfecto el libro gratuito que podeis encontrar aquí.
F# es un lenguaje funcional basado en ML y OCaml para el mundo .net, de manera que nos da un fácil acceso a las librerías a las que estamos ya acostumbrados desde una perspectiva funcional.
No olvidemos que C# ya incorpora características típicas de la programación funcional como las lambda expressions, las funciones anónimas o la llamada lazy evaluation. Ya no hay excusas
La próxima versión de asp.net introducirá un cambio que creo será agradecido por muchos desarrolladores, y es la posibilidad de poder controlar la generacion de los IDs de los controles, de manera que podamos evitar las típicas cadenas “ctl00_ctl…” etc. que tanto dificultan el acceso DOM a los elementos mediante javascript o librerías como jQuery o Mootools.
El modo por defecto seguirá siendo el que ya conocemos, pero se podrá cambiar a nivel de página a alguno de los siguientes valores:
- Static el ID no tendrá antepuesta la concatenación de los identificadores de los contenedores padres, lo que facilita el acceso a un control que se puede encontrar en diferentes páginas en diferentes tipos de contenedores, facilitando la programación en el cliente.
- Predictable muy útil para controles con plantillas de repetición (item templates), como por ejemplo un Datalist o un Gridview.
- Inherit el control heredará el modo que use su control padre.
- AutoID el modo habitual como en cualquier versión de asp.net
Como hemos comentado esto se puede hacer a nivel de página
<%@ Page Language=”C#” AutoEventWireup=”true”
CodeFile=”Default.aspx.cs”
Inherits=”_Default”
ClientIDMode=”Predictable” %>
o a nivel de web.config para todo el sitio
<system.web>
<pages clientIDMode=“Predictable“>pages>
system.web>
Eso sí, cuidado de no generar IDs que no sean únicos. Ahora esto es nuestra responsabilidad si escogemos algunos de los modos que nos permiten controlar este aspecto.
Sería además una delicia que esto se pudiera hacer también con SharePoint 2010, que para customizarlo con jquery o similares ofrece a veces un acceso farragoso a los controles.
Saludos
Una pequeña función que hace uso de las expresiones regulares para escapar (transformar) texto en formato QP y evitar que estas cadenas salgan representadas en pantalla incorrectamente.
La función es muy sencilla:
public string EscapeText(string _textToEscape)
{
if (!(String.IsNullOrEmpty(_textToEscape)))
{
Regex _regex = new Regex(”=[0-9|A-F][0-9|A-F]“);
MatchCollection _matches = _regex.Matches(_textToEscape);
foreach (Match _match in _matches)
{
int _asciiCode = int.Parse(_match.Value.Substring(1),
System.Globalization.NumberStyles.HexNumber);
_textToEscape = _textToEscape.Replace(_match.Value,
Convert.ToString(Convert.ToChar(_asciiCode)));
}
_textToEscape = _textToEscape.Replace(”?=“, ““);
_textToEscape = _textToEscape.Replace(” “, “ “);
return _textToEscape;
}
return string.Empty;
}
Saludos.
Para todos aquellos que sufrimos el trabajo en lugares grises, beige, aburridos, cutres (lo normal) o simplemente horrendos, cuando ya no lo podamos soportar más, siempre podemos echar un vistazo a páginas como esta o esta otra para alegrarnos durante unos minutos y volver al tajo con ilusión / resignación o un suspiro.