Tôi đang tạo đối tượng C# có thể nhìn thấy được cho các cuộc gọi proxy tới dịch vụ web cho ứng dụng VB6. Tôi có một phương thức trả về một mảng các đối tượng.Làm cách nào để trả về một mảng/danh sách/tập hợp các đối tượng từ C# sang VB6
public DocActionReport[] DocActionReportByDateRange(System.DateTime reportStartDate, System.DateTime reportEndDate)
{
object[] results = this.Invoke("DocActionReportByDateRange", new object[] {
reportStartDate,
reportEndDate});
return ((DocActionReport[])(results[0]));
}
Khi tôi gọi phương pháp này qua VB6, như vậy:
Dim proxy As New QueueMovementServiceClient.ReadQueueInfo
Dim report() As QueueMovementServiceClient.DocActionReport
report = proxy.DocActionReportByDateRange(startDate, reportEndDate)
Nó thực hiện thành công (Tôi có thể thấy rằng thông qua khai thác gỗ trên dịch vụ web) nhưng không có dữ liệu được trả lại cho các đối tượng trong VB6 (LBound (báo cáo) == 0, UBound (báo cáo) == -1).
Tôi đã thử một vài cách tiếp cận khác nhau (thay đổi phương thức thành phương thức trống và chuyển bộ sưu tập thành tham số ref
) nhưng không có niềm vui cho đến nay.
Tôi cần làm gì để trả về một mảng đối tượng (danh sách, bộ sưu tập, bất kỳ thứ gì) cho người tiêu dùng VB6?
Bên VB có thư viện kiểu có DocActionReport nằm trong nó không? Kiểu nhận được ở phía VB (sử dụng TypeName) là gì? Bạn đã tạo một repro bằng cách sử dụng dữ liệu tương thích của riêng bạn mà không gọi this.Invoke()? –
Để trả lời câu hỏi của bạn: Có, DocActionReport không tồn tại trong thư viện kiểu. kiểu trả về là "Object()" mặc dù Object Viewer liệt kê chính xác nó là "DocActionReport()". Tôi có một khách hàng NET để kiểm tra dll và xác nhận kết quả với và nó hoạt động như mong đợi. –
Bạn có chắc chắn mảng không thực sự trống không? Tôi không thể tái tạo vấn đề của bạn. (Bạn thậm chí còn quan tâm đến câu hỏi này vào ngày muộn này không?) –