Es sarunājos ar Tevi, Apache!

Ir reizes, kad jāpārkāpj sava komforta zona un jāintegrējas ar kaut ko pavismaz *nefamilāru* :) Ir jau nācies darboties ar citu firmu izstrādājumiem, bet tomēr pēdējā laikā ir pārsvarā MS produkti lietošanā tikai.

Tā nu lūk vienā no projektiem nācās sarunāties ar Apache serveri. Drāts otrā galā atradās RESTful serviss, kas nodrošināja zināmu funkcionalitāti, kuru nepieciešams bija izsaukt no .NET platformas.

Pirmajā acu uzmetienā izskatās uzdevums pavisam vienkāršs: izveidojam WebRequest klases instanci, saliekam visus nepieciešamos parametrus un iegūstām atbildes plūsmu. Uzdevums pavisam vienkāršs.

Pirmā mēģinājumā izveidojam visu nepieciešamo support koda bāzi, saliekam nepieciešamās īpašības WebRequest klasei un mēģinām iegūt atbildes plūsmu.

 

string requestContent =

    string.Format("<xml/>", "arg1", "arg2");

 

var request = WebRequest.Create("http://server/service.xml");

request.Method = "post";

request.Credentials = new NetworkCredential { UserName = "user", Password = "password" };

 

byte[] byteContent = Encoding.ASCII.GetBytes(requestContent);

request.ContentLength = byteContent.Length;

 

Stream stream = request.GetRequestStream();

stream.Write(byteContent, 0, byteContent.Length);

stream.Close();

 

request.GetResponse();

 

Pēc pieprasījuma izpildes, serveris atgriež sekojošu kļūdu: "(501). Not Implemented.", kas no HTTP standarta nozīmē, ka serveri ir uzprasīts kaut kas tāds, ko šis nav ar mieru darīt.

 

Tālāk sekoja vairākas stundas dažādos .NET platformas tumšajos koda bibliotēku nostūros, kas tieši vai netieši atbild par dažāda veida komunikācijas veidiem pa drāti. Beigās pat tika izmēģināts WCF RESTful pašrakstīts klients, kas nemaz nebija tik īss, kodolīgs un vienkāršs, kā apgalvoja raksta autors :)

Pa vidu pat tika noimplementēts PHP proxy serviss, kas darbojās līdzīgi kā “man in the middle”, pārķerot visus pieprasījumus no .NET platformas un izpildot tos pret gala serveri un atbildi vienkārši forwardējot atpakaļ .NET klientam. Šis risinājums vismaz strādāja, bet tomēr nebiju ar mieru, ka savā zoodārzā ir jāuztur vēl viens dzīvnieciņš. Jautājums bija gluži kā Madagaskaras pingvīniem: “Nu kur jūs esat redzējuši pingvīnus Ņujorkā??”

Nācās tomēr pētīt tālāk šo problēmu.. Ieejot lieliskajā VS atkļūdošanas un skaņošanas režīmā papētot catch() zaru secinājums ir, ka serveris atgriež sekojošu kļūdu:

 

"Method <xml/>POST is not defined in RFC 2068 and is not supported by the Servlet API"

 

Parokoties nedaudz pa interneta plašumiem beidzot uzdūros šīs problēmas risinājumam, kas saistīts ar to, ka Apache serverim ir zināmas problēmas dažreiz atbildēt ar pareizo HTTP statusa atbildi. Klients savu pieprasījumu veido ar “Expect: 100-continue” galvenes ierakstu. Ideja šim ierakstam ir, ja serveris būs gatavs apstrādāt šo pieprasījumu, serverim būtu jāatbild ar “100 Continue” atbildi. Ja turpmākie pieprasījumi tiktu atteikti, tad serverim būtu jāatbild ar izbeigšanas atbildi un attiecīgo statusu (rfc 2616).

Beigu beigās viss beidzas labi un šai problēmai ir risinājums:

string requestContent =

    string.Format("<xml/>", "arg1", "arg2");

 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http://server/service.xml);

..

request.ServicePoint.Expect100Continue = false;

 

.. 

request.GetResponse();

 

 

Viss ir labi, kas labi beidzas.

Cerams, ka noderēs!

Published Sunday, November 15, 2009 4:03 PM by valdis.iljuconoks
Filed under: , , ,

Comments

# re: Es sarunājos ar Tevi, Apache!

Izklausās, ka esi visu dienu iztērējis it kā uz vienkāršu lietu !!!

Monday, November 23, 2009 12:43 PM by maris.lazdins

# re: Es sarunājos ar Tevi, Apache!

ō jā! :)

Sunday, November 29, 2009 10:48 PM by valdis.iljuconoks

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Very nice :)

Monday, April 04, 2011 11:31 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Nice :)

Friday, April 22, 2011 4:08 PM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Not so bad :)

Saturday, April 30, 2011 8:03 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Ho-o-o-o-t :)

Friday, June 03, 2011 2:59 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. OMG! :)

Friday, June 03, 2011 8:12 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Corking :)

Sunday, June 05, 2011 3:19 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Very nice :)

Sunday, June 05, 2011 8:30 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Bully :)

Monday, June 13, 2011 9:43 AM by dotnet.lv

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. May I repost it? :)

Saturday, July 02, 2011 9:04 AM by h1om *** gsav

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Corking :)

Saturday, July 02, 2011 2:17 PM by c38o sex tqh9

# re: Es sarunājos ar Tevi, Apache!

Es sarun jos ar tevi apache.. Not so bad :)

Sunday, July 03, 2011 2:13 AM by jusg free porn johz

# bonjour

Individus qui élire à faire le tour en tant qu'étant a réaliser ceci dans personnel secteur non public.    

http://www.testifyer.com

Friday, October 21, 2011 9:19 PM by testifyerisback

# re: Es sarunājos ar Tevi, Apache!

I can't believe I've been going for years without knonwig that.

Thursday, December 22, 2011 2:46 AM by Destiny

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)