recibo el siguiente error cuando invoco un objeto personalizado
"Object of type 'customObject' cannot be converted to type 'customObject'."
objeto de tipo 'customObject' no se puede convertir al tipo 'customObject'
A continuación se presenta el escenario cuando estoy conseguir este error:
- Invoco dinámicamente un método en un dll.
- cargar un ensamblado
- CreateInstance ....
Al llamar MethodInfo.Invoke() int paso, cadena como un parámetro para mi método funciona bien => No se lanzan excepciones.
Pero si trato de pasar uno de mis propios objetos de clase personalizados como parámetro, entonces obtengo una excepción ArgumentException
, y no es ArgumentOutOfRangeException
o ArgumentNullException
.
"Object of type 'customObject' cannot be converted to type 'customObject'."
que estoy haciendo esto en una aplicación web.
El archivo de clase que contiene el método está en un proyecto diferente. Además, el objeto personalizado es una clase separada en el mismo archivo.
No existe tal cosa como static assembly
en mi código. Intento invocar un webmethod dinámicamente. este método web está teniendo el tipo de objeto personalizado como un parámetro de entrada. Entonces cuando invoco el método web estoy creando dinámicamente el ensamblado proxy y todo. Desde el mismo ensamble estoy tratando de crear una instancia del objeto cusotm asignando los valores a sus propiedades y luego pasando este objeto como un parámetro e invocando el método. todo es dinámico y nada se crea estática .. :(no se utiliza
Agregar referencia. siguiente es un ejemplo de código que traté de crearlo
public static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
{
System.Net.WebClient client = new System.Net.WebClient();
//-Connect To the web service
using (System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl"))
{
//--Now read the WSDL file describing a service.
ServiceDescription description = ServiceDescription.Read(stream);
///// LOAD THE DOM /////////
//--Initialize a service description importer.
ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
importer.AddServiceDescription(description, null, null);
//--Generate a proxy client. importer.Style = ServiceDescriptionImportStyle.Client;
//--Generate properties to represent primitive values.
importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
//--Initialize a Code-DOM tree into which we will import the service.
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace);
//--Import the service into the Code-DOM tree. This creates proxy code
//--that uses the service.
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);
if (warning == 0) //--If zero then we are good to go
{
//--Generate the proxy code
CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");
//--Compile the assembly proxy with the appropriate references
string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences);
CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
//-Check For Errors
if (results.Errors.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (CompilerError oops in results.Errors)
{
sb.AppendLine("========Compiler error============");
sb.AppendLine(oops.ErrorText);
}
throw new System.ApplicationException("Compile Error Occured calling webservice. " + sb.ToString());
}
//--Finally, Invoke the web service method
Type foundType = null;
Type[] types = results.CompiledAssembly.GetTypes();
foreach (Type type in types)
{
if (type.BaseType == typeof(System.Web.Services.Protocols.SoapHttpClientProtocol))
{
Console.WriteLine(type.ToString());
foundType = type;
}
}
object wsvcClass = results.CompiledAssembly.CreateInstance(foundType.ToString());
MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);
return mi.Invoke(wsvcClass, args);
}
else
{
return null;
}
}
}
no puedo encontrar nada en lo que static
hacer.
Cualquier ayuda es muy apreciada.
Regards, Phani Kumar PV
* ¿Por qué? ¿Harías esto? ¿Por qué no simplemente "agregar referencia web" al proyecto? – Aaronaught
estoy desarrollando una aplicación en la que, dada la URL de WSDl, necesito invocar un método web en ella. como se supone que debo usar diferentes métodos web, no puedo hacer una referencia web. –