使用svcutil.exe生成的WCF服务代理中的数组而不是列表

时间:2012-12-31 11:53:27

标签: arrays wcf generic-list proxy-classes

我有ServiceContract

using System.Collections.Generic;
using System.ServiceModel;
namespace MainModule.Sub.Communication
{
    [ServiceContract]
    public interface IWebMethod
    {
        [OperationContract(IsOneWay = false)]
        bool InvokeAlert(List<int> userIds);

        [OperationContract(IsOneWay = false, Name = "InvokeAlertByMainID")]
        bool InvokeAlert(List<int> userIds, int mainId);

        [OperationContract(IsOneWay = true)]
        void DeletePopupNotifications(System.Data.DataSet deletedNotifications);
    }
}

我使用下面的命令来生成代理(我必须使用command-line而不是Add Service Reference执行此操作。

SvcUtil.exe http://localhost/MainCommunicationServer/wm  /ct:System.Collections.Generic.List`1 /out:HTTPRouterServerProxy.cs 

即使我添加了ct开关(collectionType),代理也将其生成为数组(int[])。如果不在VS

中使用Add Service Reference窗口,我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,/ ct开关可能对OperationContract级别集合没有任何影响(在某些情况下?)。尝试使用包装器DataContract类型,例如bool InvokeAlert(InvokeAlertRequest r);其中InvokeAlertRequest将是[DataContract]类型,其中包含一个[DataMember] List<int> userIds;

答案 1 :(得分:0)

如果SvcUtil无法创建使用DataContractSerializer并使用XmlSerializer的代理,则/ ct开关将停止工作。

这只是猜测,但我怀疑System.Data.DataSet可能导致此问题。