tôi nhận được lỗi sau khi tôi gọi một đối tượng tùy chỉnh
"Object of type 'customObject' cannot be converted to type 'customObject'."
Object kiểu 'customObject' không thể được chuyển đổi sang loại 'customObject'
Sau đây là kịch bản khi tôi nhận được lỗi này:
- Tôi gọi phương thức theo dll động.
- nạp một assembly
- CreateInstance ....
Khi gọi MethodInfo.Invoke() đi qua int, string như một tham số cho phương pháp của tôi hoạt động tốt => Không có trường hợp ngoại lệ được ném ra.
Nhưng nếu tôi thử và chuyển một trong các đối tượng lớp tùy chỉnh của riêng mình làm tham số, thì tôi nhận được một ngoại lệ ArgumentException
và không phải là số ArgumentOutOfRangeException
hoặc ArgumentNullException
.
"Object of type 'customObject' cannot be converted to type 'customObject'."
Tôi đang làm điều này trong ứng dụng web.
Tệp lớp chứa phương thức nằm trong một dự án khác. Ngoài ra đối tượng tùy chỉnh là một lớp riêng biệt trong cùng một tệp.
Không có thứ nào được gọi là static assembly
trong mã của tôi. Tôi đang cố gắng để gọi một webmethod động. webmethod này có kiểu customObject như một tham số đầu vào. Vì vậy, khi tôi gọi các webmethod tôi đang tự động tạo ra lắp ráp proxy và tất cả. Từ cùng một assembly tôi đang cố gắng tạo ra một thể hiện của đối tượng cusotm để đưa các giá trị vào các thuộc tính của nó và sau đó truyền đối tượng này như một tham số và gọi phương thức này. tất cả mọi thứ là năng động và không có gì được tạo ra tĩnh .. :(
add tài liệu tham khảo không được sử dụng. Sau đây là một số mẫu mã tôi đã cố gắng để tạo ra nó
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;
}
}
}
tôi không thể tìm thấy bất cứ điều gì static
trong những gì tôi làm.
Any help is appreciated rất nhiều.
Kính trọng, Phani Kumar PV
* Tại sao * bạn sẽ làm điều này? Tại sao không chỉ "thêm tham chiếu web" vào dự án? – Aaronaught
i am developping một ứng dụng trong đó cho các địa chỉ WSDl tôi cần phải gọi một webmethod trong đó. như tôi có nghĩa vụ phải sử dụng webmethods khác nhau tôi không thể làm một tài liệu tham khảo web. –