svcutil 为不同的服务生成 MessageContractAttribute 或 OperationContractAttribute
svcutil generating MessageContractAttribute or OperationContractAttribute for different services
我正在使用 svcutil 制作代理 classes 并且我注意到对于不同的服务我得到不同的结果。
我正在使用这个 svcutil 命令:
svcutil http://server/SomeService.asmx
/l:c#
/syncOnly
/out:C:\ISomeService
/config:C:\ISomeService.config
/namespace:*,SomeServiceProxy
第一个服务的代理 classes 生成如下代码:
[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
{
...
}
第二个服务的代理 classes 生成这个:
[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
{
...
}
为什么一个 class 标记为 MessageContractAttribute 而另一个标记为 DataContractAttribute? svcutil 如何决定使用其中之一,两种服务的命令相同?
svcutil
) 使用的 DataContract 格式 supports only a subset of XML Schema Definition. So it depends on the service metadata: svcutil
(actually System.ServiceModel.Description.WsdlImporter 尝试默认生成 DataContract。如果遇到无法表示为 DataContract 的模式,它会生成一个 MessageContract 作为回退。
我正在使用 svcutil 制作代理 classes 并且我注意到对于不同的服务我得到不同的结果。
我正在使用这个 svcutil 命令:
svcutil http://server/SomeService.asmx
/l:c#
/syncOnly
/out:C:\ISomeService
/config:C:\ISomeService.config
/namespace:*,SomeServiceProxy
第一个服务的代理 classes 生成如下代码:
[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
{
...
}
第二个服务的代理 classes 生成这个:
[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
{
...
}
为什么一个 class 标记为 MessageContractAttribute 而另一个标记为 DataContractAttribute? svcutil 如何决定使用其中之一,两种服务的命令相同?
svcutil
) 使用的 DataContract 格式 supports only a subset of XML Schema Definition. So it depends on the service metadata: svcutil
(actually System.ServiceModel.Description.WsdlImporter 尝试默认生成 DataContract。如果遇到无法表示为 DataContract 的模式,它会生成一个 MessageContract 作为回退。