1

WCFを使用してwsdlで文字列のnillableのデフォルト値をfalseに変更することは可能ですか? これをすぐに実行できる属性や設定が見つかりませんが、属性を使用して自分でこれを行うことで、何らかの方法で WCF を拡張することは可能ですか? それとももっと良い方法がありますか?文字列プロパティの一部を nillable=false としてマークする可能性が必要ですが、すべてではありません。

例えば:

[DataMember]
[Nillable(false)]
public string MyData{ get; set; }
4

2 に答える 2

0
[DataMember(IsRequired=True)]

これでうまくいくはずです。

于 2012-05-15T14:53:00.473 に答える
0

これを実現するには、独自の 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] をサービス クラスに適用します。

お役に立てれば。

于 2014-04-29T13:27:49.057 に答える