Yeni bir uygulama için WCF kullanarak uygulamak istediğimiz mevcut bir SOAP web hizmeti arabirimimiz var. Bu küçük bir detay dışında iyi çalışıyor gibi görünüyor. Bir işlevin dönüş türünün XML ad alanı, web hizmetinin kendisinin XML ad alanından farklı olmalıdır. Ve hayatım boyunca, işe yaramayacağım.WCF XML serileştirmesi nasıl özelleştirilir
Aynı sorunu küçük bir örnek projeyle yeniden oluşturdum. WCF arayüzü:
[XmlSerializerFormat]
[ServiceContract(Namespace = "urn:outer-namespace")]
public interface IService1
{
[OperationContract]
MyClass DoStuff(int value);
}
[Serializable]
public class MyClass
{
[XmlElement(ElementName = "DataString")]
public string MyString { get; set; }
}
web hizmeti uygulaması:
bu webcoder bir yanıt daha sonra da seri halepublic class Service1 : IService1
{
public MyClass DoStuff(int value)
{
return new MyClass { MyString = "Wooh!" };
}
}
: Biz (belirtilmemesi SABUN şeyler)
<DoStuffResponse xmlns="urn:outer-namespace">
<DoStuffResult>
<DataString>Wooh!</DataString>
</DoStuffResult>
</DoStuffResponse>
Ama istiyorum <DoStuffResult>, xmlns = "urn: iç isim-alanı" olacaktır.
Arabirim işlevinde veya web hizmeti işlevinde [return: XmlElement (...)] eklemeyi denedim, ancak bu işlem gerçekleşmiyor. Ayrıca MyClass sınıf tanımında bir [XmlType] veya [XmlRoot] çalışmıyor.
WCF web hizmeti işlevinin dönüş değeri olan nesnenin seri hale getirilmiş XML ad alanını (veya öğe adını) nasıl değiştireceği konusunda bir fikri olan var mı?
Zaten söz belirtildiği gibi, ben bir XmlRoot özellik ekleyerek denedim ve işe yaramadı. Ad alanını yalnızca MyClass içindeki alanlara ekler, ancak MyClass'ın kendisine eklemez. DataContract da çalışmıyor ve yeniden adlandırmak ve sipariş vermek için XmlSerializer'ı tercih ederim. –
svcutil kullandım, ancak bir serializer belirtmeden ve MessageContract ve ServiceContract ile XmlSerializer birleşimini oluşturdu. Yani bir ya da iki sarmalayıcı var ve ben hepsini çalıştırmak için XML öznitelikleri kullanmaya devam edebilirim. –