我正在使用svcutil来创建代理类,我注意到对于不同的服务,我会得到不同的结果。
我正在使用这个svcutil命令:
svcutil http://server/SomeService.asmx
/l:c#
/syncOnly
/out:C:\ISomeService
/config:C:\ISomeService.config
/namespace:*,SomeServiceProxy
第一个服务的代理类生成如下代码:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="GetFirstService", Namespace="http://othernamespace.com")]
public partial class GetFirstServiceRequest : SomeServiceProxy.ResponseInfoBase
{
...
}
第二项服务的代理类产生了这个:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName = "GetSecondService", WrapperNamespace = "http://somenamespace.com", IsWrapped = true)]
public partial class GetSecondServiceRequest
{
...
}
为什么一个类用MessageContractAttribute标记,另一个用DataContractAttribute标记? svcutil如何决定使用其中一个,两个服务的命令是否相同?
答案 0 :(得分:1)
DataContract格式supports only a subset of XML Schema Definition。因此,它取决于服务元数据:svcutil
(svcutil
使用的实际System.ServiceModel.Description.WsdlImporter)默认尝试生成DataContracts。如果它遇到无法表示为DataContract的模式,它会生成一个MessageContract作为后备。