我正在尝试通过命令行为wcf服务生成代理。根据需要,我使用 * svcutil.exe 。
我需要为这些服务创建代理服务。示例命令如下所示。关于代理的生成,一切都在嗡嗡作响。
对于其中一个代理,我需要将Collection类型作为List而不是默认的Array。但是,如下面明确提到的那样,我无法使集合类型正确。生成的代理仍具有集合的Array类型。执行这些命令时没有错误。不知道到底发生了什么。
svcutil.exe http://localhost/DealService.svc /noLogo
/out:D:/Proxies/DealServiceReference.cs /n:*,MyApp.WinUI.DealServiceReference
/ct:System.Collections.Generic.List`1
有谁知道,为什么我会得到默认的收集类型,尽管有明确的提及?有谁知道怎么做对吗?
(Subquestion - 我看到的所有将collectiontype定义为列表的例子,神秘的`1 出现在System.Collections.Generic.List的末尾,但我无法理解它的需要,我都无法在某个地方得到有效的解释。所以,如果有人能够对此有所了解,那就太棒了。)
答案 0 :(得分:0)
您应该使用该开关获取DataMember类中的T类型列表。要进行故障排除,请尝试通过为该服务添加服务引用来创建代理,并configuring the collection settings as shown here.如果使用预期的List of T创建服务引用,则WSDL很好。如果没有,可能是SvcUtil不允许将集合序列化/反序列化为T列表。
答案 1 :(得分:0)
注意: -
如果作为参数提供的名称相同, svcutil.exe
将覆盖磁盘上的现有文件。这可以包括代码文件,配置或元数据文件。要在生成代码和配置文件时避免这种情况,请使用/mergeConfig
开关。
此外,引用类型的/r
和/ct
开关用于生成数据协定。使用XmlSerializer
时,这些开关不起作用。
参考:https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx
这可能是您的情况,请查看使用的Serializer ...