2011-01-14 3 views
1

Я пытаюсь получить поведение по умолчанию для клиента, ссылающегося на мой WSFL WCF, чтобы установить IsReference в true для импортированных DataContracts. Похоже, что я должен быть в состоянии использовать IDataContractSurrogate с GetCustomDataToExport для достижения этой цели ... что specifcally означает добавление следующего сгенерированной ComplexType в XSD, связанный с WSDL:WCF DataContract GetCustomDataToExport

<xs:attribute ref="ser:Id" /> 
    <xs:attribute ref="ser:Ref" /> 

Существует, конечно, нет полезную документацию, которую я могу найти у MS, о том, как использовать этот метод. На странице MSDN говорится, что он должен вернуть объект ... но не указывает вообще, какой тип объекта должен быть ... как бесполезно ...

Прежде чем я пойду, отражая это, кто-нибудь из вас знаете, как использовать этот метод?

Спасибо.

ответ

4

Законченное только с помощью IWsdlExportExtension следующим образом:

public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context) 
    { 
     foreach (var complexType in exporter.GeneratedXmlSchemas.Schemas().OfType<XmlSchema>().SelectMany(s => s.SchemaTypes.Values.OfType<XmlSchemaComplexType>()).Where(t => t.QualifiedName.Namespace.StartsWith("http://schemas.datacontract.org/2004/07/"))) 
     { 
      complexType.Attributes.Add(new XmlSchemaAttribute { RefName = new XmlQualifiedName("Id", "http://schemas.microsoft.com/2003/10/Serialization/") }); 
      complexType.Attributes.Add(new XmlSchemaAttribute { RefName = new XmlQualifiedName("Ref", "http://schemas.microsoft.com/2003/10/Serialization/") }); 
     } 
    } 

GetCustomDataToExport никогда даже не вызывается, когда WSDL генерируется. Отличная работа, опять же, MS.