我有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
窗口,我该怎么做呢?
答案 0 :(得分:1)
如果我没记错的话,/ ct开关可能对OperationContract级别集合没有任何影响(在某些情况下?)。尝试使用包装器DataContract类型,例如bool InvokeAlert(InvokeAlertRequest r);
其中InvokeAlertRequest
将是[DataContract]
类型,其中包含一个[DataMember] List<int> userIds;
答案 1 :(得分:0)
如果SvcUtil无法创建使用DataContractSerializer并使用XmlSerializer的代理,则/ ct开关将停止工作。
这只是猜测,但我怀疑System.Data.DataSet
可能导致此问题。