2

我有一个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-linenot via来执行此操作Add Service Reference

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

即使我添加了ct开关(collectionType),代理也将其生成为数组(int[])。Add Service Reference在 VS中不使用窗口的情况下如何做到这一点

4

2 回答 2

1

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

于 2013-01-01T21:47:45.270 回答
0

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

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

于 2013-01-02T11:46:04.310 回答