asp.net 2.0 a c# - 1323
13 2 6
Kapitola 34 - Pokročilé webové služby
Další součástí, kterou potřebujete, je metoda ChainStreamO, kterou volá ASP.NET před provedením seria lizace či deserializace. Vaše rozšíření S A může překrýt metodu ChainStreamO tak, aby byla vložena do OP zpracovávacího procesu. V tomto momentu může rozšíření cachovat referenci pro původní proud a vytvořit v paměti nový proud, který je pak vrácen do dalšího rozšíření v řetézci. private Stream oldStream; private Stream newStream: public override Stream ChainStream(Stream stream) { oldStream = stream; newStream = nw MemoryStreamQ; e return newStream; > Toto je pochopitelně pouze jedna část příběhu. |e na dalších metodách, aby buď data přečetly ze starého proudu, nebo je zapsaly do nového proudu, v závislosti na etapě, ve které se zpráva nachází. Provedete to voláním metody CopyStream(). Výsledkem implementace tohoto poněkud komplikovaného návrhu bude to, že všechna rozšíření S A budou mít možnost modifikovat proud SOAP, aniž by si navzájem přepisovali OP změny. Obvykle jsou metody ChainStreamO a CopyStreamO základními součástmi architektury rozšíření SOAP, přičemž jsou identické ve všech S A rozšířeních, se kterými se setkáte. OP Úkolem metod LoglnputMessageQ a LogOutputMessageQ je extrahovat informace ze zprávy a zaznamenat je. Obě tyto metody používají metodu CopyStream(). Při deserializaci obsahuje vstupní proud kód XML, který má být deserializován, přičemž ukazatel je nastaven na začátek proudu. Metoda I.oglnputMessageO kopíruje vstupní proud do paměťového bufferu proudu a zaprotokoluje obsah proudu. Metoda také nastaví ukazatel na začátek bufferu proudu tak, aby další rozšíření mohlo přistupovat k proudu. private void LogInputMessage(SoapMessage message)
{
CopyStream(oldStream. newStream); message.Stream.Seek(0. SeekOrigin.Begin); LogMessage(message. newStream); message.Stream.Seek(0, SeekOrigin.Begin); } Když probíhá serializace, serializér zapisuje do paměťového proudu vytvořeného v ChainStreamO. Když je po serializaci zavolána funkce LogOutputMessageO, ukazatel se nachází na konci proudu. Funkce LogOutputMessageO nastaví ukazatel na začátek proudu tak, aby rozšíření mohlo zaprotokolovat obsah proudu. Před vrácením je obsah paměťového proudu zkopírován do výstupního proudu, a ukazatel je vrácen na konec obou datových proudů. private void LogOutputMessage(SoapMessage message) { message.Stream.Seek(0, SeekOrigin.Begin); LogMessage(message. newStream): message.Stream.Seek(0. SeekOrigin.Begin); CopyStream(newStream. oldStream); }
- Pro možnost psaní komentářů se přihlašte nebo zaregistrujte.


































































