【问题标题】:C# generated proxy method different than original Java service methodC# 生成的代理方法与原始 Java 服务方法不同
【发布时间】:2009-12-03 08:14:06
【问题描述】:

我有一个具有以下方法签名的 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&lt;ContactOD&gt;

我需要对 java web 服务或代理的 C# 生成做什么,这样我才能在代理类中看到这样的方法:

public MyListClass getContactList(MyListClass myList)

非常感谢, 阿德里安娜

【问题讨论】:

    标签: c# java wcf interop


    【解决方案1】:

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

    即。

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

    【讨论】:

    • 是的,我注意到了,但是我的列表被包裹在另一个类(MyListClass)中。我想在代理中也看到该类,并且方法签名与 java 中的一样。 C# 看到列表被包装,只显示 MyListClass 的内容,它是 ContactOD 的数组。
    【解决方案2】:

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

    在命令行中,适当的选项是/collection:"&lt;type&gt;",其中是完全限定的类型名称。

    在添加服务参考 UI 中,高级选项下方有一个下拉菜单。

    【讨论】:

    • 问题是我在生成时没有看到 MyListClass,而是看到了 ContactOD 数组(类的内容)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多