Loading...
coaster avatar coaster 412 Точки

[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

Тагове:
0
C# Web Services & Cloud 18/08/2015 00:35:49
yuletodim avatar yuletodim 37 Точки

Здравей! Не знам до колко съм права, но class Point трябва да го дефинираш в интерфейса на сървиса. Наков го спомена доста бегло в лекцията. При мен тръгна от раз. Над всяко пропърти обаче трябва да сложиш нотификация [DataMember], иначе клиента не го вижда.

[DataContract]
    public class Point
    {
        private double x;
        private double y;

        [DataMember]
        public double X
        {
            get { return x; }
            set { x = value; }
        }

        [DataMember]
        public double Y
        {
            get { return y; }
            set { y = value; }
        }
    }

 

В клиента:

client.CalcDistance(startPoint, endPoint);

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Напротив! Добра практика е да дефинираш подобни структури данни в отделна библиотека, което ще оправи и проблема с конструктора. Когато дефинираш структурата в асемблито на WCF, тя се рефлектира в клиента. Това, което клиента вижда и ползва, не е това, което си дефинирала в WCF. Много е лошо да дефинираш повече от едно нещо в един файл!

Аз лично дефинирах Point в отделен файл и пак работи, но конструктора си остава default-ния.

Атрибутите със сигурност са задължителни, защото явно WCF сериализира данните, което е и логично. В този ред на мисли клиента вижда само структурите, които имат атрибут [DataContract] и пропъртитата, които имат атрибут [DataMember]. Тези два атрибута се ползват и за JSON.

И един съвет: подобни структури данни, които съдържат до 4 полета (или 16 байта), се дефинират като "struct", а не като "class". Разликата между двете е следната: struct е value type, а class е reference type. Value типовете се пазят в стек паметта, следователно достъпа до тях е бърз. Reference типовете се пазят в heap паметта, а само тяхната референция(адрес в паметта) се пази в стека - от там идва и името. Struct се ползва за съвкупност от данни - без логика, без методи - само полета и пропъртита. Хубаво е да се знаят тези неща. :)

3
17/08/2015 23:30:05
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.