Jan
31

An application error occurred in Catalog Service Operation [GetIdFromName] Parte 2

Problema

Al tratar de importar un servicio WCF en MSE construido a partir de Web Service Software Factory (WSSF), se me presento el siguiente error:

An application error occurred in Catalog Service Operation [GetIdFromName]. Error Detail [Exception Information Type[MseDataException] Source[Microsoft.ManagedSolutions.Mse.Catalog.Data] Message[Procedure or function 'GetIDFromName' expects parameter '@EntityName', which was not supplied.] StackTrace[ at Microsoft.ManagedSolutions.Mse.Catalog.Data.Entity.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection) at Microsoft.ManagedSolutions.Mse.Catalog.Module.Business.EntityManager.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection)]Exception Information Type[SqlException] Source[.Net SqlClient Data Provider] Message[Procedure or function 'GetIDFromName' expects parameter '@EntityName', which was not supplied.] StackTrace[ at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.ManagedSolutions.Mse.Catalog.Data.Entity.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection)]]

Causa

Al parecer el problema es causado por la forma como es serializado el WSDL del servicio.Posibles causas:

  • El modelo de serialización con el que se construyo el servicio WCF con WSSF. Ver la primera parte del blog.
  • No todos los data contract generados estan definidos completamete y más concretamente les hace falta su correspondiente namespace.

Solución

Verificar que en los data contract generados se encuentre establecido el valor XmlRootAttribute con el Namespace correspondiente al contrato, en caso que no lo posea.

Ejemplo,
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://sap.com/xi/FSCM/Global2")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://sap.com/xi/FSCM/Global2", IsNullable = true)]
public partial class BusinessScopeID {

Y sabor !!!  Podremos importar el servicio en MSE.

Sep
14

The AcquireConnection method call to the connection manager "ExcelConnection" failed with error code 0xC00F9304

 

Problema

Dentro de un paquete de SQL Server Integration Server, tengo una conexión a un archivo excel, el problema esta que al tratar de ejecutar el paquete me genera el siguiente error:

Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the connection manager "ExcelConnection" failed with error code 0xC00F9304.  There may be error messages posted before this with more information on why the AcquireConnection method call failed.

Solución

Cambiar la propiedad del proyecto ETL,

Run 64BitRuntime = false

May
04

The target version of the .NET Framework in the project does not match the .NET Framework launch condition version ’3.5′

Problema

Al compilar un projecto de instalación (project setup) de un servicio WCF en Visual Studio 2010 que esta usando Framework 3.5, se genera el siguiente warning:

The target version of the .NET Framework in the project does not match the .NET Framework launch condition version ’3.5 ‘. Update the version of the .NET Framework launch condition to match the target version of the.NET Framework in the Advanced Compile Options Dialog Box (VB) or the Application Page (C#, F#).

Solución

Se debe asegurar que la plataforma del projecto de instalación y del projecto del servicio WCF esten referenciando el mismo framework que se desea instalar – en mi caso – el framework 3.5.

1. Verificar el target framework del proyecto del servicio WCF.

Project properties -> Application -> Target framework.

2. Las configuraciones del launch condition y prerrequisites del proyecto de instalación debe configurarse de acuerdo al framework seleccionado en el paso 1.

  2.1) Launch condition:
      a. Clic derecho en el proyecto de instalación y seleccionar View -> Launch Conditions.
      b. Clic derecho en el nodo .Net framework y seleccionar properties.
      c. Seleccione el .NET Framework correspondiente – en mi caso el 3.5 -  como valor del Version property.

  2.2) Prerequisites:
      a. Clic derecho en el proyecto de instalación y seleccione properties.
      b. Clic en el boton prerequisites para abrir la caja de dialogo prerequisites.
      c. Chequear el .Net framework correcto y deschequear los otros frameworks que no corresponden.

Nota:  No olvidar dejar en las propiedades del proyecto de instalación, el valor de 2.0.50727.0 en la propiedadad ASPNETVersion, que corresponde a proyectos que se ejecuten bajo un framework anterior al 4.0; ya que en caso contrario, al momento de instalarlo sacaría el siguiente error:

Installation issue

Links relacionados,

http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/6dcfa4a6-8aa9-48dc-92c5-b8d838a59e1a

http://technotes.nirmalperera.com/2010/09/aspnet-web-app-deployment-issue.html

Apr
07

RPC style binding in MSE

Problema

Se genera un error al intentar importar un servicio web cuyo WSDL este construido con el estilo del binding “RPC” (RPC style binding).

Causa

MSE (Managed Services Engine) no soporta servicios web con este estilo de binding RPC (RPC style binding) sino DOCUMENT style binding.  Ver link relacionados:

http://servicesengine.codeplex.com/discussions/63145?ProjectName=servicesengine
http://servicesengine.codeplex.com/discussions/76419

Solución

  • Crear un servicio .Net (preferiblemente WCF) proxy del mismo.
  • Intentar modificar el endpoint del servicio para dejarlo con un binding con estilo document y no RPC, con el fin que MSE pueda entender.

Recursos relacionados sobre RPC y Document Style Binding

http://www.w3.org/TR/wsdl
The Difference Between RPC and Document Style WSDL

http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/c018da90-0201-0010-ed85-d714ff7b7019
Keep up with the Web service styles (and uses)
http://www.javaworld.com/javaworld/jw-10-2003/jw-1003-wsstyles.html?page=1
WSDL binding styles 
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.wbit.help.ui.doc/topics/rwsdlstyle.html

Apr
01

Convertir un wsdl a xsd

Objetivo

Utilizar el esquema XSD correspondiente de un servicio web fuente, para poder definir los mensajes de entrada y salida de sus operaciones para construir su correspondiente servicio web proxy.

Pasos a seguir

1. Generar la clase proxy y el archivo de configuración correspondiente del servicio web fuente, usando Service Model Metadata Utility (svc.exe), que es una utilidad que se encuentra en Visual Studio Command Prompt .

Ejemplo,

Svcutil.exe http://serviciofuente.dominio.com:9001/service?wsdl /out:proxy.cs  /language:c#  /config:app.config  /namespace:*,Servicios.Proxy

En la anterior sentencia, se especifica la dirección URL del servicio web fuente, el nombre de la clase proxy, el lenguaje, el nombre de archivo de configuración que contendrá la configuración del Endpoint para invocar el servicio y el NameSpace que se desea para la clase proxy (opcional).

Notas a tener en cuenta,

Esta herramienta no soporta Multiframework. Si se desea generar un artefacto .Net 4.0, se tiene que usar svcutil.exe desde el SDK de .Net 4.0. Para generar un artefacto .Net 3.5, se tiene que usar svcutil.exe desde el SDK de .Net 3.5.

2. Empaquetar la clase proxy generada, dentro de una librería de .Net y compilar el assembly.

3. Con la utilidad XML Schema Definition Tool (xsd.exe), se genera el esquema correspondiente del assembly anteriormente compilado. Esta es también es una utilidad que se encuentra en Visual Studio Command Prompt .

Ejecutar la siguiente sentencia donde se encuentra ubicado el assembly correspondiente,

xsd .exe Servicio.Proxy.Service.dll

El comando anterior genera el esquema XML para todos los tipos del ensamblado myAssembly.dll, y los guarda como schema0.xsd en el directorio actual.

Y sabor !!!   Romanos 13: 11 – 14

Mar
31

An application error occurred in Catalog Service Operation [GetIdFromName]

Problema

Al tratar de importar un servicio WCF en MSE construido a partir de Web Service Software Factory (WSSF), se me presento el siguiente error:

An application error occurred in Catalog Service Operation [GetIdFromName]. Error Detail [Exception Information Type[MseDataException] Source[Microsoft.ManagedSolutions.Mse.Catalog.Data] Message[Procedure or function 'GetIDFromName' expects parameter '@EntityName', which was not supplied.] StackTrace[ at Microsoft.ManagedSolutions.Mse.Catalog.Data.Entity.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection) at Microsoft.ManagedSolutions.Mse.Catalog.Module.Business.EntityManager.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection)]Exception Information Type[SqlException] Source[.Net SqlClient Data Provider] Message[Procedure or function 'GetIDFromName' expects parameter '@EntityName', which was not supplied.] StackTrace[ at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.ManagedSolutions.Mse.Catalog.Data.Entity.GetIdFromName(String entityName, EntityClass entityClass, SqlTransaction transaction, SqlConnection connection)]]

Causa

Al parecer el problema es causado por la forma como es serializado el WSDL del servicio. Construyendo el servicio con WSSF, inicialmente se definió el modelo con la siguiente serialización:

Al nivel del modelo del service Contract

Serializer Type = DataContractSerializer

Y a nivel de las operaciones:

Is Wrapped = True

Solución

Cambiar la forma como se serializa el servicio y no permitir que las operaciones sean “envueltas” (wrapped) con un elemento raíz., es decir,

Al nivel del modelo del service Contract

Serializer Type = XmlSerializer

Y a nivel de las operaciones:

Is Wrapped = False

La siguientes son las diferencias del WSDL generado, con una serialización tipo XmlSerializer vs DataContractSerializer.

DiferenciasSerializer

Y sabor !!!  Podemos importar el servicio en MSE.

Referencias

http://blogs.itsynergy.co/blogs/mhernandezp/2010/04/25/web-service-software-factory-errores-en-la-generacion-proxy-cuando-es-iswrapped-false/

Mar
24

Error Timeout occured while trying to acquire a writer lock on path

Problema

Al trata de compilar una plantilla de NetTiers en CodeSmith Studio, me genero un error de compilación al parecer con el cache que se maneja. El error era el siguiente:

Timeout occured while trying to acquire a writer lock on path ‘c:\users\luis\appdata\local\codesmith\v5.2\template cache\999062333′

Solución

Lo que se debe hacer es limpiar el cache de CodeSmith. Seguir los siguientes pasos:

  1. Cerrar todas las ventanas abiertas de CodeSmith y Visual Studio.
  2. Abrir una consola (cmd.exe) y digitar el siguiente comando. No hay necesidad de ubicarse en una ruta en especial.

        cs /clearcache

  3.  Volver a compilar y listo !!!

Mar
24

Incluir plantilla .cst en NetTiers-CodeSmith

En mi caso, lo que requeria era incluir una clase en el  proyecto de Services que es una de las capas que construye NetTiers.

Los siguientes son los pasos que se deben seguir:

  1. Se debe crear la nueva plantilla .cst y colocarla donde se requiere que quede ubicada la clase a generar. Para mi caso deseaba que la clase quede generada en el proyecto de Services y la ruta es “…\NetTiers\Components”.
  2. Adicionar la referencia de la nueva plantilla .cst a los siguientes archivos:

  • …\NetTiers\TemplateLib\FrameworkTemplates.cst
  • …\NetTiers\TemplateLib\CreateTemplates.cst

De la siguiente forma:

En FrameworkTemplates.cst

<%@ Register Name="NuevaPlantilla" Template="../Components/NuevaPlantilla.cst" MergeProperties="False" ExcludeProperties="" %>

En CreateTemplates.cst

CodeTemplates.Add("NuevaPlantilla.cst", base.CreateTemplate<NuevaPlantilla>()); this.PerformStep(); 

  3. Modificar …\Nettiers\NetTiers.cst, para adicionar la referencia de la nueva plantilla, en el sitio donde se definen las plantilla para el proyecto donde se desea generar la clase:

XmlElement iSecurityContextViewsNode = AddFileNode(commonNode, "NuevaPlantilla.cs");
//Se establece los valores de las propiedades que maneje la nueva plantilla
this.GetTemplate("NuevaPlantilla.cst").SetProperty("NameSpace", ComponentsNameSpace);
this.GetTemplate("NuevaPlantilla.cst").SetProperty("BLLNameSpace", BLLNameSpace);
this.GetTemplate("NuevaPlantilla.cst").SetProperty("DALNameSpace", DALNameSpace);
this.RenderToFile("NuevaPlantilla.cst", rootPathComponents + \\NuevaPlantilla.cs, true);

4.  Adicionar referencia de la nueva plantilla en …\NetTiers\VisualStudio\vsnet2005.project.cst. 

Se debe ubicar las lineas donde se estan incluyendo las clases del proyecto o capa donde se va a incluir la nueva clase y luego incluir:

<Compile Include="<%=ComponentsSubFolder%>NuevaPlantilla.cs">
  <SubType>Code</SubType>
</Compile>   

5. Compilar NetTiers.cst en CodeSmith Studio y listo !!!!

Oct
22

Data type mismatch in criteria expression con el Oledb Provider

Problema

Usando el proveedor de datos OLEDB para FoxPro 9.0 al intentar actualizar o insertar en una tabla que tuviera una columna de tipo OleDbType.DBTimeStamp se genera el siguiente error:

Data type mismatch in criteria expression

Causa

El problema es causado por la columna DateTime al pasarle los milisegundos ya que este tipo de dato OleDbType.DBTimeStamp no los soporta.

Solución

Eliminar los milisegundos. Tener en cuenta que el parametro en el CommandText debe estar con signo ?, ya que si se usa @ se genera error. El siguiente es un ejemplo donde se asume que el DbCommand “cmd” ya esta definido .

  cmd.CommandText = "INSERT INTO flor (bar_flor,fecha_actu)  VALUES (”,?)";

  DbParameter par = cmd.CreateParameter();
  par.DbType = System.Data.DbType.DateTime;
  par.ParameterName = "@fecha_actu";
  par.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
                                         DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
  cmd.Parameters.Add(par);
  dbConn.Open();
  result = cmd.ExecuteNonQuery();

Oct
12

Error instalando Dynamic Resolution Sample en Windows Server 2008

Problema

El error es generado cuando se ejecuta por linea de comandos el instalador del ejemplo de ESB llamado Dynamic Resolution, ubicado en ..Samples\DynamicResolution\Install\Scripts\DynamicResolution_Install.cmd

The term ‘C:\Programs Files (X86)\Microsoft Visual Studio 8\SDK\v2.0\bin\gacutil.exe’ is not recognized as the name of a cmdlet

Este es un pantallazo del error.

ErrorDynamicResolutionSample

Causa

Sucede en equipos de 64 bits que tengan instalado VS2010 y algunas extensiones de VS2008, ya que el script ESBFunctions.ps1, ubicado en c:\projects\microsoft.practices.esb\source\install\scripts\, intenta ubicar la herramienta de registrar dll en el GAC en una ruta existente que no posee este ejecutable gacutil.exe.

Solución

Es necesario modificar el script c:\projects\microsoft.practices.esb\source\install\scripts\ESBFunctions.ps1, para que ubique la ruta correcta del gacutil.exe

1. Abrir con el notepad el script.

2. Reemplazar las líneas

$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\.NETFramework\”).$SdkKeyName

if ($SDKPath -eq $null)
{
$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.1″).InstallationFolder
}
if ($SDKPath -eq $null)
{
$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.0A”).InstallationFolder
}

por

$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.0A”).InstallationFolder

if ($SDKPath -eq $null)
{
$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.1″).InstallationFolder
}
if ($SDKPath -eq $null)
{
$SDKPath=(Get-ItemProperty  “hklm:SOFTWARE\Wow6432Node\Microsoft\.NETFramework\”).$SdkKeyName
}

Older posts «