Silverlight - Webservice Problem z przesyłem byte[]

0

Witam.

Napisałem metodę i umieściłem ją w webservice. Metoda ta jest wywoływana przez klijęcką stronę kodu pobiera tablicę bitów i zapisuje ją jako plik na serwerze na którym stoi webservice. Wszystko działa bez zarzutu dopuki długość tablicy bitów mieści się w okolicach 10000 przy 40000 webservice wywala się w tym miejscu kodu: (Ten fragment znajduje się w pliku "Reference.cs" wygenerowanym przez VS. Nic tam nie zmieniałem).

        public void EndSaveStream(System.IAsyncResult result) 
        {
            object[] _args = new object[0];
    [!!!]   base.EndInvoke("SaveStream", _args, result);
        }

...z następującym komunikatem:
"The remote server returned an unexpected response: (404) Not Found."

Manipulacja rozmiarem bufora w pliku konfiguracyjnym "ServiceReferences.ClientConfig" zdaje się nie mieć żadnego wpływu na to zachowanie.

A oto funkcja webservice chwytająca i zapisująca omawianą tablicę bitów do pliku.

public void SaveStream(byte[] Strumien)
{
    string FileName = @"D:\programowanie\WWW\obrazki\TempOkladki\obrazek.jpg";
    FileStream DestinationFile = new FileStream(FileName, FileMode.Create);
    for(int counter=0;counter<Strumien.Length;counter++)
    {
        DestinationFile.WriteByte(Strumien[counter]);
    }
    DestinationFile.Close();    
}

Pomocy !

0

tablicę bitów

bajtow..

podejrzyj (np. WireSharkiem) co dokladnie przelecialo po WS'ie. pamietam ze keidys tablice byly implementowane na chama i wysylanie np. byte[] = {1,2,3,4,5 ...} zostaloby przeslane jako:

  <byte>1</byte>
  <byte>2</byte>
  <byte>3</byte>
  <byte>4</byte>
  <byte>5</byte>
...

jesli trafiles w ten przypadek, to, heh, zauwaz ze z 40000bajtow robi sie *=14 bajtow tekstu wiadomosci.
jesli implementacja jest sensowniejsza, to byte[] zostanie przemielone przez np. Base64 (koszt ok. *=1.5) i wyslane jako jedna wartosc "string". tak czy owak narzut jest duzy i bufory musza byc odpowiednio duzo wieksze
stad np. dosc popularne WS-Attachements do przesylu binarnych

0

1). Sorry, chodziło mi o bajty. Późno już było, spać mi się chciało. :-)

2). Całość działa u mnie na razie na jednym komputerze i odwołuje się do localhost. Czy wireshark wyłapouje takie wewnętrzne pakiety?

3). Jeśli to faktycznie kwestia limitu przesyłanego bloku danych, to jak ten limit podnieść? nawet jeśli z 10000 zrobi mi się 140000 to dalej tylko około 140 kb. A ja chcę przesyłać obrazki do 2mb.

0

W końcu znalazłem rozwiązanie tego problemu. Chodzi o to, że obrócz wielkości bufora, jest jeszcze maksymalny rozmiar tablicy (16kb.) Aby ustawić odpowiedni rozmiar trzeba skonfigurować plik "web.config" a nie ServiceReferences.ClientConfig Dokładne rozwiązanie mieści się w tutaj: http://silverlight.net/forums/p/24166/87009.aspx#87009

1 użytkowników online, w tym zalogowanych: 0, gości: 1