C# 生成的代理方法与原始 Java 服务方法不同

标签 c# java wcf interop

我有一个具有以下方法签名的 Java 服务:

       @WebMethod(operationName = "getContactList")
        public MyListClass getContactList(@WebParam(name = "myList") MyListClass myList) throws IllegalArgumentException {
                return myList;
        }

public class MyListClass implements Serializable{
List<ContactOD> innerList;

    public List<ContactOD> getInnerList() {
        if(innerList == null){
            innerList = new ArrayList<ContactOD>();
        }
        return innerList;
    }

    public void setInnerList(List<ContactOD> innerList) {
        this.innerList = innerList;
    }

}

当我在 C# 中为此 Java 服务生成代理时,我得到如下方法签名:

   public ContactOD[]  getContactList(ContactOD[] myList)

我在生成的代理 MyListClass 中没有看到任何包装此 List<ContactOD> 的内容。 .

我需要对 java web 服务或代理的 C# 生成做什么,以便我可以在代理类中看到如下方法:

public MyListClass getContactList(MyListClass myList)

非常感谢, 阿德里安娜

最佳答案

Visual Studio 中的代理生成器不会直接将 Java List 映射到 C# List,而是将其视为数组。如果您希望使用泛型集合,在 C# 方面最简单的做法就是在其他地方简单地使用 List,然后在使用 Web 服务方法时创建到 T[] 或从 T[] 进行创建。

即。

List<ContactOD> contacts = new List<ContactOD>();
contacts.Add(New ContactOD("Tim", "0123456789"));
List<ContactOD> returnValue = new List<ContactOD>(ProxyHolder.getContactList(contacts.ToArray());

关于C# 生成的代理方法与原始 Java 服务方法不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838404/

相关文章:

java - Midlets执行问题

java - 在 spring security saml 中,无法 GET/saml/login

java - 使用 ArrayList 时整数不会增加

wcf - 使用NetTcpBinding创建WCF服务时,使用端点“localhost”还是计算机的主机名?

WCF - 创建可靠的 WCF 应用程序的技巧

c# - WCF TCP比HTTP快多少

c# - 使用 selenium C# 查找和替换文本文件中的数据

C# int.TryParse ("3",out tst) AND Convert.ToInt32 ("3") 返回 0x00000003 而不是 3 它会是什么?

C# Lucene.Net IndexWriter.DeleteDocuments 不起作用

c# - .NET 集合和泛型如何工作?