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

时间:2009-12-03 08:14:06

标签: 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)

非常感谢, 阿德里安娜

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

生成WCF代理时,您可以选择要使用的集合类型。

在命令行中,相应的选项是/collection:"<type>",其中是完全限定的类型名称。

在添加服务参考用户界面中,高级选项下有一个下拉列表。