Вопрос по wcf – установка nillable = false с WCF

1

Можно ли изменить значение по умолчанию nillable для строк на false в wsdl с помощью WCF? Я не могу найти какие-либо атрибуты или настройки, делающие это из коробки, но возможно ли каким-то образом расширить WCF, используя атрибуты, чтобы сделать это самостоятельно? Или есть способ лучше? Мне нужна возможность пометить некоторые из моих свойств строки как nillable = false, но не все.

например:

[DataMember]
[Nillable(false)]
public string MyData{ get; set; }
Похоже, что он решил это, установив все свои строки или все необходимые значения в nillable false, что не совсем то, что я хотел бы сделать. Мне удалось заставить работать WsdlExporter, но теперь мне нужно выполнить некоторое сопоставление между сгенерированной схемой и моими интерфейсами и классами, чтобы получить мой атрибут [Nillable]. Есть идеи, где найти такую информацию? Markus
Связанные с:stackoverflow.com/questions/9039850/… Steven
Проверять, выписыватьсяstackoverflow.com/questions/1589750/… GTG

Ваш Ответ

2   ответа
0
[DataMember(IsRequired=True)]

Error: User Rate Limit ExceedednotError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Markus
0

этой цели.

Вот пример:

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] к вашему классу обслуживания.

Надеюсь это поможет.

Похожие вопросы