是否可以使用 WCF 在 wsdl 中将字符串上的 nillable 的默认值更改为 false?我找不到任何开箱即用的属性或设置,但是是否可以通过自己使用属性来以某种方式扩展 WCF?或者有没有更好的方法?我需要将我的一些字符串属性标记为 nillable=false,但不是全部。
例如:
[DataMember]
[Nillable(false)]
public string MyData{ get; set; }
您必须编写自己的 WsdlExportExtension 来实现这一点。
这是一个示例:
public class WsdlExportBehavior : Attribute, IContractBehavior, IWsdlExportExtension
{
public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
{ }
public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
{
var schemaSet = exporter.GeneratedXmlSchemas;
foreach (var value in schemaSet.GlobalElements.Values)
{
MakeNotNillable(value);
}
foreach (var value in schemaSet.GlobalTypes.Values)
{
var complexType = value as XmlSchemaComplexType;
if (complexType != null && complexType.ContentTypeParticle is XmlSchemaSequence)
{
var sequence = complexType.ContentTypeParticle as XmlSchemaSequence;
foreach (var item in sequence.Items)
{
MakeNotNillable(item);
}
}
}
}
private static void MakeNotNillable(object item)
{
var element = item as XmlSchemaElement;
if (element != null)
{
element.IsNillable = false;
}
}
public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, BindingParameterCollection parameters)
{ }
public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime client)
{ }
public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
{ }
public void Validate(ContractDescription description, ServiceEndpoint endpoint)
{ }
}
并将 [WsdlExportBehavior] 应用于您的服务类。
希望这可以帮助。
[DataMember(IsRequired=True)]
我相信这应该做吗?