[Homework] WS&Cloud - Distance Calculator Client
Здравейте, пробвах се с първото домашно от Web Services & Cloud и още на първата задача излезе няква странна грешка във WCF Test Client-a (Failed to add a service. Service metadata may not be accessible), която оправих с добавяне на [Serializable] преди дефинирането на класа Point. Следващата грешка, която нямам идея защо се появява и заради която пиша тук, е че в клиента не ми разпознава конструктора от service-a. Може би бъркам нещо със самия конструктор, тъй като ООП-то ми е леко чуждо :) Идеи? Мисля, че със screenshot ще е по-ясно, отколкото с пускане на код.
EDIT: Ако някой все пак държи на код :D
Напротив! Добра практика е да дефинираш подобни структури данни в отделна библиотека, което ще оправи и проблема с конструктора. Когато дефинираш структурата в асемблито на WCF, тя се рефлектира в клиента. Това, което клиента вижда и ползва, не е това, което си дефинирала в WCF. Много е лошо да дефинираш повече от едно нещо в един файл!
Аз лично дефинирах Point в отделен файл и пак работи, но конструктора си остава default-ния.
Атрибутите със сигурност са задължителни, защото явно WCF сериализира данните, което е и логично. В този ред на мисли клиента вижда само структурите, които имат атрибут [DataContract] и пропъртитата, които имат атрибут [DataMember]. Тези два атрибута се ползват и за JSON.
И един съвет: подобни структури данни, които съдържат до 4 полета (или 16 байта), се дефинират като "struct", а не като "class". Разликата между двете е следната: struct е value type, а class е reference type. Value типовете се пазят в стек паметта, следователно достъпа до тях е бърз. Reference типовете се пазят в heap паметта, а само тяхната референция(адрес в паметта) се пази в стека - от там идва и името. Struct се ползва за съвкупност от данни - без логика, без методи - само полета и пропъртита. Хубаво е да се знаят тези неща. :)