The server committed a protocol violation section=responsest

0

The server committed a protocol violation. Section=ResponseStatusLine

Witam.
Tworzę pewną usługę. Z poziomu klienta C# wywołuje funkcje na serwerze i wszystko byłoby OK, gdyby nie pojawiający sie w tytule błąd. Pojawia on się tylko przy drugi wywołaniu funkcji.

Sprawdziłem w TCPView i wiem, że podczas pierwszego wywołania funkcji zostaje otwarty port i zostaje zamknięty dopiero po ok. 20 sekundach. W tym czasie nie można wysłać ponownie zapytania do serwera bo dostaniemy błąd, jak w tytule. To zdecydowanie za dużo... Dlaczego połączenie nie jest od razu zamykane? Nie mam możliwości wysłania nagłówków z poziomu tej klasy, np. Keep-Alive może rozwiązałoby problem... Tą samą aplikację testuję w domu i działa OK, a w pracy nie. Złą konfigurację serwera też chyba wykluczam, ponieważ oprócz lokalnego, testowałem na home.pl i miałem to samo.

Wrapper jest generowany przez WSDL.exe, wiec nie ma sensu go tu umieszczać.

0

Super na prawdę. Jak masz wklejać mój tytuł do googla, to daruj sobie taką pomoc, bo to już nawet jest złośliwe. Nie jestem dzieckiem Neostrady i z wyszukiwarki korzystać umiem. Od trzech dni szukam rozwiązania, a podawane odpowiedzi nie rozwiązują problemu.

0

Daj jakiś kod jeśli możesz.

0

Właściwie to tu nie ma co pokazywać... Klasa wrappera jest tworzona automatycznie na podstawie pliku WSDL. Plik WSDL jest tworzony za pomoca biblioteki NuSOAP w PHP.

Wywołanie przykłądowej funkcji z klasy wygenerowanej przez plik wsdl.exe to:

Tree[] tree = webService.GetTree("articles");

Pierwsze wywołanie działa. Na następne czekać trzeba 20 sek. inaczej spowoduje to błąd. Im0lementacja funkcji wygenerowana przez wsdl.exe to:

        /// <remarks/>
        [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/widecms/index.php/GetTree", RequestNamespace="http://localhost/widecms/", ResponseNamespace="http://localhost/widecms/")]
        [return: System.Xml.Serialization.SoapElementAttribute("return")]
        public Tree[] GetTree(string module_name) {
            object[] results = this.Invoke("GetTree", new object[] {
                        module_name});
            return ((Tree[])(results[0]));
        }

A jej asynchroniczny odpowiednik to:

        /// <remarks/>
        public System.IAsyncResult BeginGetTree(string module_name, System.AsyncCallback callback, object asyncState) {
            return this.BeginInvoke("GetTree", new object[] {
                        module_name}, callback, asyncState);
        }
        
        /// <remarks/>
        public Tree[] EndGetTree(System.IAsyncResult asyncResult) {
            object[] results = this.EndInvoke(asyncResult);
            return ((Tree[])(results[0]));
        }
        
        /// <remarks/>
        public void GetTreeAsync(string module_name) {
            this.GetTreeAsync(module_name, null);
        }
0
markac napisał(a)

Super na prawdę. Jak masz wklejać mój tytuł do googla, to daruj sobie taką pomoc, bo to już nawet jest złośliwe. Nie jestem dzieckiem Neostrady i z wyszukiwarki korzystać umiem. Od trzech dni szukam rozwiązania, a podawane odpowiedzi nie rozwiązują problemu.
a ja to niby miałem wiedzieć po którym akapicie twojego postu?
BTW nie napisałem żebyś szukał tylko że powinieneś tu znaleźć odpowiedz bo sam nie mam czasu grzebać i szuakć. Jak sprawdziłeś jakieś rozwiązania to byś może podał co sprawdziłęś i nie działało, żeby inni nie proponowali tego samego.

0

Spoko Misiekd, ale takie odpowiedzi każdego mogą wkurzyć, szczegolnie kogos, kto pare dni wyrywa sobie wlosy z glowy i nie wie już co robić :) Zawsze mam zasadę, że zanim zawrócę komuś głowę, wertuję google. Problem rozwiązałem. Musiałem zrobić skrypt od początku, żeby na to wpaść ;/ Chodzi o znak spacji na końcu ?> (znak końca skryptu w PHP). Dziwne to tym bardziej, że raz działało, raz nie ;/ Parę dni mordęgi...

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