【问题标题】:Array instead of List in WCF Service Proxy Generated using svcutil.exe使用 svcutil.exe 生成的 WCF 服务代理中的数组而不是列表
【发布时间】:2012-12-31 11:53:27
【问题描述】:

我有一个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 窗口,我怎么能做到这一点

【问题讨论】:

标签: arrays wcf generic-list proxy-classes


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    这只是一个猜测,但我怀疑System.Data.DataSet 可能是造成这种情况的原因。

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多