Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość Push-up3k

[c#][WCF]DataMember [Solved]

Rekomendowane odpowiedzi

Gość Push-up3k

Chcę zrobić usługę, która będzie przechowywała pewną zmienną dla klientów. Wzoruję się na tym:

https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/

Szybkie pytanie - czy to jest jeden zestaw elementów DataMember dla wszystkich klientów czy też usługa tworzy indywidualnie dla każdego klienta?

Jeśli tworzy inne dla każdego klienta, to powinienem użyć, żeby było jedno dla wszystkich? Chcę o tym wiedzieć zanim wezmę się do roboty, bo może powinienem użyć czegoś innego.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Dobra, ja już znam odpowiedź - nie da się.

 

Jakby się ktoś pytał, jak to rozwiązałem - zbudowałem bazę danych i łączę usługę z nią, ale można też użyć SOAP messages.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie do końca jest dla mnie jasne, co chcesz osiągnąć, ale współdzielenia danych pomiędzy wywołaniami można też użyć MemoryCache.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Chcę wykonać interakcję pomiedzy klientami. Do tego potrzebuję zmiennej, którą mogę zmienić (set) i pobrać z niej wartość (get). Inaczej to ujmując, jeśli w usłudze jest jakiś string i klient A coś tam wpisze to klient B nie zobaczy nulla tylko to co wpisał tam klient A.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No to w bieda wersji statyczna zmienna w HelloWorldService, wartość będzie dopóki wszystko będzie w jednym wątku i dopóki IIS nie zresetuje puli aplikacji. Choć oczywiście rozwiązanie z bazą lepsze pod każdym względem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co prawda można wymusić w WCF obsługę wszystkich wywołań tylko przez jeden wątek, ale w 99% przypadków użycie zmiennej statycznej nie zda egzaminu.

Sugerowany przeze mnie MemoryCache też jest oczywiście limitowany, bo każdy restart puli aplikacji wyczyści go, ale za to jest dużo szybszy niż baza danych.

Jeśli używasz SQL Servera, to możesz zaszaleć i użyć bazę + MemoryCache + SqlDependency - tutaj masz przykład.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

No to w bieda wersji statyczna zmienna w HelloWorldService, wartość będzie dopóki wszystko będzie w jednym wątku i dopóki IIS nie zresetuje puli aplikacji. Choć oczywiście rozwiązanie z bazą lepsze pod każdym względem.

To już wiem. W tym momencie mnie bardziej interesuje czy MemoryCache sobie poradzi.

Co prawda można wymusić w WCF obsługę wszystkich wywołań tylko przez jeden wątek, ale w 99% przypadków użycie zmiennej statycznej nie zda egzaminu.

Sugerowany przeze mnie MemoryCache też jest oczywiście limitowany, bo każdy restart puli aplikacji wyczyści go, ale za to jest dużo szybszy niż baza danych.

Jeśli używasz SQL Servera, to możesz zaszaleć i użyć bazę + MemoryCache + SqlDependency - tutaj masz przykład.

 

Na razie ja to próbuję to zrobić na zasadzie Xamarin <-> DataMember <-> MySQL i wygląda na to, że nie mogę wykonać żadnej akcji na DataMember, jak choćby pobrać do niego po stronie usługi coś z bazy danych, dopóki klient najpierw u siebie nie wpisze coś do niego.

 

 

Najgorzej, że to jest praca dyplomowa, która miała być o interakcji pomiędzy platformami i miała tam przykładowa aplikacja, gdzie ja dałem tam komunikację przez wcf, bo jak spytałem w necie, co najlepiej do tego użyć, to ktoś mi to polecił. Oczywiście to się do tego nie nadaje. Do desktopowych, na sieci lokalnej - ok, ale nie na urządzenia przenośne przez cokolwiek. Xamarin fajnie pokazuje, że można robić jedną apkę, która zadziała na wielu różnych urządzeniach, ale tak długo jak nie obsługuje żadnych duplexowych modeli to robienie komunikacji przez wcf ma mało sensu i to napiszę w pracy dyplomowej, a typa co mi to polecił, znajdę i zabiję :mad2:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Właściwie to mógłbym się nie przejmować i od razu do bazy danych uderzać, a na usłudze dać jakieś randomowe zdarzenia.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co prawda można wymusić w WCF obsługę wszystkich wywołań tylko przez jeden wątek, ale w 99% przypadków użycie zmiennej statycznej nie zda egzaminu.

Zaplątałem się w pojęciach. Chodziło mi o jeden proces, bo oczywiście różne wątki wewnątrz procesu dzielą ze sobą pamięć, a więc i zmienne statyczne.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Co prawda można wymusić w WCF obsługę wszystkich wywołań tylko przez jeden wątek, ale w 99% przypadków użycie zmiennej statycznej nie zda egzaminu.

Zaraz, czyli da się jednak zrobić, żeby te dane istniały dla wielu klientów? Jak to zrobić? Nie jestem pewien co w ogóle powinienem szukać...

 

 

A zresztą, chyba już nie mam ochoty się męczyć. Obecnie próbuję coś wykonać i jeśli mój kolejny pomysł nie przejdzie to zrobię tak, że dane będzie pobierał i zmieniał klient, a po stronie serwera będę te dane przetwarzał, indywidualnie dla każdego klienta. To badziewie nie nadaje się do niczego innego jak do przetwarzania dla każdego klienta z osobna. Najwyżej mnie uwalą.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zaraz, czyli da się jednak zrobić, żeby te dane istniały dla wielu klientów? Jak to zrobić? Nie jestem pewien co w ogóle powinienem szukać...

 

Jeśli to jest na prace dyplomową, czyli nie zależy Ci na wydajności ani skalowalności to możesz użyć Single Instance Mode

Metody tworzenia instancji

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

W sumie mi się udało zrobić, ale tak połowicznie. Działa, ale tylko w jedną stronę. Działa wpisywanie (set), ale nie w drugą stronę (get). Zmienia się wszystko w bazie danych, ale już pobrać cokolwiek nie mogę. Nie wiem dlaczego. Niby wszystko według logiki z przykładu z oficjalnego poradnika, ale jednak nie hula.

1. Próbowałem testować. Z usługą chyba wszystko jest ok. Narzędzie VS2017 do testowania usług wszystko ładnie się zwraca.

2. Z usługą się łączy jako adres prywatnej sieci, a nie jako localhost. Zresztą przy localhoście w ogóle nie działa.

3. Nie zwraca żadnych błędów, ani wyjątku, a nie wiem jak debugować apkę z równoczesnym debugowaniem usługi. Twórcy VS nie przewidzieli takiej możliwości.

4. Zastanawiam się co to może być. Zły kod? Konfiguracja usługi? Konfiguracja Windowsa (porty? proxy? cokolwiek?) i serwera IIS? A może w jakiś sposób router blokuje? Może ktoś miał taki problem (internet nie wie...).

5. Kusi mnie by jednak sprawdzić czy pobieranie danych bezpośrednio z bazy danych, bez udziału WCFa zadziała.

 

Dodaję solucje klienta i serwera, może ktoś coś zauważy.

http://uploadfile.pl/pokaz/1341634---7v7r.html

 

Edit: Widzę, że bezpośrednie połączenie XF z mysql może okazać się niemożliwe :///////

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Już wiem. BasicHttp umożliwia transport w jedną stronę. Metody w odwołaniach są voidami.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Push-up3k

Dobra, wszystko działa. Nie dodałem przechwytywania JakaśMetodaCompleted. Trzeba zrobić dokładnie tak jak w linku z pierwszego postu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...