Bir web hizmeti üzerinden karmaşık veri gönderme tercih yöntemi nedir?

oy
9

Bu 2008 ve hala bu sefer ayrılıyorum. Böylece bunun geçti ve ondan dönen karmaşık türü ihtiyacı olan bir web yöntemi geliştiriyorum. Ben oynuyor ediyorum iki seçenek vardır:

  1. Pass ve dönüş fiili veriler ve davranış hem iş nesneleri. Wsdl.exe çalıştırıldığında, otomatik olarak sadece veri kısmını ihtiva vekil sınıfları oluşturur ve bunlar otomatik olarak ve sunucu tarafında benim gerçek iş nesnelerden dönüştürülecektir. İstemci tarafında, onlar sadece aptal vekil türünü kullanmaya alacak ve onlar uygun gördükleri şekilde bazı gerçek iş nesneleri içine haritaya sahip olacak. Burada büyük bir dezavantajı ben sunucu ve istemci tarafında hem kendi ve gerçek iş nesneleri aynı seti kullanmak istiyorsanız, ben gerçek nesneler ve yana (isim çakışmaları vb ile belli baş ağrısı girmek olmasıdır proxy aynı adlandırılır.)

  2. Gerçek iş nesneleri geçirmeye çalışıyor unut. Bunun yerine, sadece benim gerçek iş elle nesneleri için ben ileri geri eşler basit DataTransfer nesneleri oluşturmak. Onlar hala zaten wsdl.exe yeni vekil nesnelere kopyalanan, ama en azından doğal olarak onlara iş mantığı ile nesneleri işleyebileceği web hizmetleri düşünerek kendimi kandırma değilim.

Bu arada - herkes için Wsdl.exe nasıl söyleyeceğini biliyor mu değil nesnenin bir kopyasını? Biz sadece bunu söylemek mümkün olmamalı Hey, hemen şurada bu mevcut türünü kullanın. Kopyalamak etmeyin!

Neyse, sanki şimdilik 2. oturttuktan ama Hepinizin ne düşündüğünü merak ediyorum. Ben orada bir his var yolu genel olarak bunu yapmak için daha iyi yollar, ve hatta tüm noktalarda tamamen doğru olmayabilir, bu yüzden bana deneyimleri geçenlere bildirin.

Güncelleme : Ben sadece bir Servis Başvurusu ekleyerek, yerine vekil dosyasında yepyeni özdeş türünü oluştururken VS 2008 mevcut türlerini yeniden bir seçenek olduğunu öğrendim. Tatlı.

Oluştur 16/08/2008 saat 02:58
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
4

Ben bir melez yapardım. Böyle bir nesne kullanmak istiyorsunuz

public class TransferObject
{
    public string Type { get; set; }
    public byte[] Data { get; set; }
}

sonra ben sonra bir nesneyi serileştirir sıkıştırır güzel küçük bir kullanıma sahiptir.

public static class CompressedSerializer
{
    /// <summary>
    /// Decompresses the specified compressed data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="compressedData">The compressed data.</param>
    /// <returns></returns>
    public static T Decompress<T>(byte[] compressedData) where T : class
    {
        T result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            memory.Write(compressedData, 0, compressedData.Length);
            memory.Position = 0L;

            using (GZipStream zip= new GZipStream(memory, CompressionMode.Decompress, true))
            {
                zip.Flush();
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                result = formatter.Deserialize(zip) as T;
            }
        }

        return result;
    }

    /// <summary>
    /// Compresses the specified data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="data">The data.</param>
    /// <returns></returns>
    public static byte[] Compress<T>(T data)
    {
        byte[] result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            using (GZipStream zip= new GZipStream(memory, CompressionMode.Compress, true))
            {
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                formatter.Serialize(zip, data);
            }

            result = memory.ToArray();
        }

        return result;
    }
}

Sonra sadece tür adı olurdu transferi nesneyi geçerdi. Yani böyle bir şey yapabileceğini

[WebMethod]
public void ReceiveData(TransferObject data)
{
    Type originType = Type.GetType(data.Type);
    object item = CompressedSerializer.Decompress<object>(data.Data);
}

Şu anda sıkıştırılmış serileştirici o kesinlikle yazılı hale getirmek için generic'leri kullanır, ancak kolayca bir yöntem yukarıda originType kullanarak serisini Tip nesnede almaya yapabilir, tüm uygulanmasına bağlıdır.

umarım sana fikir verir. Oh, ve wsdl.exe yeniden türlerini desteklemez, diğer soruyu cevaplamak için, WCF olsa yapar.

Cevap 16/08/2008 saat 03:31
kaynak kullanıcı

oy
1

Darren yazdı: Ben bir melez yapardım. Böyle bir nesne kullanmak istiyorsunuz ...

İlginç bir fikir ... nesnenin yerine (wsdl-ed) nesnenin kendisinin tefrika versiyonunu geçen. Bir bakıma, ben onun zarafetini gibi ama başka bir şekilde, potansiyel üçüncü taraflar veya ortakları ya da her neyse için web hizmeti açığa amacını boşa görünüyor. Nasıl ne geçmek bilecek? onlar belgelere tamamen güvenmek zorunda misiniz? seri özgü çok Net olduğundan Ayrıca, "heterojen müşteri" yönü bazı kaybeder. Ne Sizin teklif de kullanım durumları bu tür içindir diye merak ediyorum, kritik istemem. Gerçi kapalı bir ortamda kullanmaktan yanlış bir şey görmüyorum.

Ben ... WCF içine bakmak gerekir bunu kaçıyordum ama belki de zamanı gelmiştir.

Cevap 16/08/2008 saat 03:49
kaynak kullanıcı

oy
1

ah, herhalde, ben sadece ben webcoder tüketiciyi olduğumda bunu ya da bir nesneyi istemek ve sonra doğrudan web hizmeti tüketen onlardan ziyade gönderme seri ve idare kontrolörü çeşit varsa. doğrudan webservice tüketiyorlarsa Ama gerçekten, o zaman gerek olmazdı ya ille ilk etapta o tür olurdu montaj var ve üretir WSDL nesneleri kullanarak edilmelidir.

i başka bir şey kullanmak sevmiyorum çünkü evet, ne ben ortaya koymak özgü çok NET olduğunu. i .net dışında webservices tüketmek sadece diğer zaman javascript, ama şimdi ben yerine sadece xml webservice yanıtlarının json yanıtları kullanabilir :)

Cevap 16/08/2008 saat 04:16
kaynak kullanıcı

oy
1

harita ve üzerinden geçmesi amacıyla uygun değildir özelliklere sahip olabilir (yani seti ve iş nesneler arasında dönüştürme ve web hizmeti ve çevirmen geçmiş olsun serileştirilebilir nesneler kümesi var - katmanları ayırmak için bir argüman da var tel)

Onun yaklaşımı web hizmeti yazılım fabrikası tarafından tercih hizmet fabrikada ve web hizmeti arayüzü / sözleşme bozmadan iş nesneleri değiştirmek anlamına gelir

Cevap 21/08/2008 saat 11:31
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more