到目前为止,我已经将我的服务的DataContracts移动到他们自己的程序集中,这样我就可以生成一个包含DataContract类的客户端程序集,如演示herehere .

生成和引用客户端DataContract程序集并在Visual Studio中生成代理时指定重用类型后,大多数DataContract代码都从生成的Reference.cs类中消失,除了遗留了几个类型:

public partial class OWSResultOfArrayOfguid ...

public partial class OWSResultOfOrderFulfillmentResult ...

这些是使用带有泛型类型的DataContract的一对服务方法的返回类型 . 这是它的声明:

[DataContract(Name = "OWSResultOf{0}")]
public class OWSResult<T>

在检查我使用svcutil生成的.xsd文件后,任何类型的OWSResult似乎都不包括在内 . 这是我用来生成文件的命令:

>svcutil /dconly "C:\...\bin\Debug\OWS.DataContracts.dll"

DataContracts.dll是程序集,我将所有DataContract定义移入 . 如果我只是没有看到.xsd文件中的定义,这里是我用来生成C#客户端代码的命令:

>svcutil /dconly /language:C# *.xsd /out:OWS.DataContract

s.cs / edb / s /ct:System.Collections.Generic.List`1 / r:C:\windows\Microsoft.NET\F ramework \ v2.0.50727 \ mscorlib.dll

所以我在我的通用DataContract(OWSResult)中添加了一个KnownType属性,告诉工具这些类型的实现 . 例如:

[KnownType(typeof(OWSResult<Guid>))][KnownType(typeof(OWSResult<OrderFulfillmentResult>))]

但它仍然不会生成这些类型 . 如何让svcutil包含这些?