<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>René Stein - .Net Remoting</title>
    <link>http://blog.renestein.net/</link>
    <description>Názory vzešlé z mesaliance humanitní skepse a technologického optimismu</description>
    <image>
      <url>http://blog.renestein.net/themes/discreetBlogBlue/SpotImages/sfinga_rss.jpg</url>
      <title>René Stein - .Net Remoting</title>
      <link>http://blog.renestein.net/</link>
    </image>
    <language>cs-CZ</language>
    <copyright>René Stein</copyright>
    <lastBuildDate>Mon, 27 Mar 2006 22:47:11 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7174.0</generator>
    <managingEditor>rene@renestein.net</managingEditor>
    <webMaster>rene@renestein.net</webMaster>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=190b67c8-989e-47ca-9606-4c2e70721eba</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,190b67c8-989e-47ca-9606-4c2e70721eba.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,190b67c8-989e-47ca-9606-4c2e70721eba.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=190b67c8-989e-47ca-9606-4c2e70721eba</wfw:commentRss>
      <title>Další FAQ k .NET Remotingu</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,190b67c8-989e-47ca-9606-4c2e70721eba.aspx</guid>
      <link>http://blog.renestein.net/Dal%c5%a1%c3%ad+FAQ+K+NET+Remotingu.aspx</link>
      <pubDate>Mon, 27 Mar 2006 22:47:11 GMT</pubDate>
      <description>Při použití CAO (Client Activated) objektu nebo při vrácení MarshalByRefObjectu ze SAO (Server Activated) objektu fungují volání metod jen v lokální síti. Na počítači přistupujícím přes internet (a komunikujícím tedy většinou přes adresu firewallu/routeru) volání metody vzdáleného CAO objektu vždy selže. &lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=190b67c8-989e-47ca-9606-4c2e70721eba"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,190b67c8-989e-47ca-9606-4c2e70721eba.aspx</comments>
      <category>.NET Framework</category>
      <category>.Net Remoting</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=0b38bcae-a911-4e3c-85f6-0d18f01776df</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,0b38bcae-a911-4e3c-85f6-0d18f01776df.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,0b38bcae-a911-4e3c-85f6-0d18f01776df.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0b38bcae-a911-4e3c-85f6-0d18f01776df</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <title>Dotazy a odpovědi k .NET Remotingu</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,0b38bcae-a911-4e3c-85f6-0d18f01776df.aspx</guid>
      <link>http://blog.renestein.net/Dotazy+A+Odpov%c4%9bdi+K+NET+Remotingu.aspx</link>
      <pubDate>Sun, 17 Oct 2004 16:33:00 GMT</pubDate>
      <description>Tento spot přímo navazuje na starší spot o nejčastějších problémech v .NET Remotingu...
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=0b38bcae-a911-4e3c-85f6-0d18f01776df"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,0b38bcae-a911-4e3c-85f6-0d18f01776df.aspx</comments>
      <category>.Net Remoting</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=262cc8c0-dadd-426c-868e-281bb27d4f2f</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=262cc8c0-dadd-426c-868e-281bb27d4f2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Kniha Network programming for the Microsoft .Net Framework je úvodem do síťového programování.
Slovo úvodem bych zdůraznil, protože žádné rozsáhlé případové studie v ní nenaleznete.<br />
Po obligátním a povrchním úvodu do .Net Frameworku, nás autoři seznámí se “streamy”
a pochopitelně se soustředí na třídu NetworkStream. Následuje popis práce s thready
a ukázky asynchronního návrhového vzoru (metody Begin*, End*)- i když je problematice
věnováno plných 19 stran, nečekejte žádné "best practices", ale spíše upovídaný přepis
toho, co je v MSDN. Ukázek asynchronního návrhového vzoru je v celé knize hříšně opulentní
množství , takže tato kapitola je jen "lákavou" návnadou.<br />
Dále je v knize vysvětlen význam serializace a probrány jsou XML, binární a SOAP serializace.
Když už je serializace probírána do takových detailů, jakými jsou XML atributy, mohla
být zmíněna i dynamická redefinice atributů za asistence třídy XmlAttributeOverrides.<br />
Lehký úvod do jmenného prostoru System.Net, jehož smysl mi v kompozici knihy uniká,
je vystřídán popisem protokolů IPV4 a IPV6 a metod třídy DNS. Tato kapitola mi připadá
z celé knihy nejpovedenější, protože z ní čiší, že její autor své téma podrobně zná,
ale přitom dokáže na vyhrazeném prostoru vybrat to podstatné a nezabíhat do zdržujících
detailů.<br />
Následující dvě kapitoly tvoří jádro knihy, protože se zabývají klientskými a serverovými
sokety a také jejich nadstavbami s jednodušším API (TcpClient, TcpListener). Bohužel
tyto kapitoly trpí také největší nevyvážeností ve zpracování tématu. Přístup autorů
kolísá od pasivního přejímání informací z MSDN k neustálému zdůrazňování, že pro většinu
synchronních metod existují jejich asynchronní doplňky. Když jsem se tuto zajímavou
informaci dověděl potřetí a prohlédl si další úmorný Step By Step příklad určený pravděpodobně
programátorům po akutní lobotomii provedené brokovnicí, měl jsem chuť připojit se
dobře cíleným výstřelem k zástupu šťastných idiotů, abych dokázal kapitoly dočíst.
Tam, kde by měla být tématika zpracována velmi prodrobně i s ukázkami, se autoři omezí
na shrnující tabulky, jejichž pravděpodobně jediným smyslem je rychlé navýšení počtu
popsaných normostran. Moje výtka směřuje hlavně k zcela nedostatečné dokumentaci enumerace
SocketOption.<br />
Kromě TCP/IP protokolu jsou zde i ukázky UDP protokolu a implementace takzvaných "Raw"
soketů. "Raw" sokety jsou vysvětleny na příkladu ICMP protokolu (což není nic jiného
než všem důvěrně známý PING). Slušelo by se zmínit, že na Windows 2000 a XP mohou
"Raw" sokety otevřít pouze administrátoři. (ping.exe může spustit každý uživatel,
jde asi o jedinou výjimku).<br />
Důležitost tříd WebClient, WebResponse a WebRequest je vyzdvižena v kapitole nazvané
"Using the Network". Tato kapitola je povedená, i když zde asi nenaleznete nic překvapivého.
Zmíněny jsou cookies, různé způsoby autentizace, certifikáty, SSL.<br />
Z dalších kapitol rychle získáte pocit, že se autoři zavázali dodat dílko o vyšším
počtu stran, a proto zařadili témata jako jsou Web Services a .Net Remoting. Sice
jsou vždy naťuknuty pokročilé vlastnosti (SOAP extenze, Channel sinks), ale z jejich
odfláknutého vysvětlení si začátečník bude brzy zoufat a slabší nátura se k těmto
konceptům kvůli neumětelství autorů již nikdy nevrátí. Jako leitmotiv knihy:) se zde
objevuje podrobné vysvětlení asynchronního volání WWW služeb.<br />
Autoři se také s těžko pochopitelnou vervou pustí i do vysvětlování Code Acces Security.
Jejich snaha se ale omezí na výčet oprávnění a hrubý přehled významu konstitutivních
složek CAS, takže kdybych se s CAS setkal poprvé, získám mylný dojem, že CAS je nesmysl
bez jakékoli užitné hodnoty. Jsme také poučeni, že bychom měli komunikaci mezi sokety
kryptovat, protože svět plný hackerů čeká na naše pakety. Děkuji za osvětu, hned se
cítím jako up-to-date vývojář, teď si najdu jen ve slovníku cizích slov význam termínu
kryptovat, abych ty hackery svými programy sejmul. :)<br />
Doporučení pro psaní výkonných aplikací jsou shrnuta v mozaice nazvané "Network performance
and scalability. Zajímavá je hlavně část týkající se doporučení pro používání "Nagle"
algoritmu, ale ani ostatní rady vašim aplikacím neublíží. 
<br />
Zcela do počtu je kratičká poslední kapitola Advancements in .Net Framework programming,
jejíž originální teze by se dala shrnout "Nebojte se, v příští verzi bude zase vše
lepší, výkonnější a bezpečnější".<br />
Co říci závěrem? Jestliže se sokety začínáte a jste úplní zelenáči, kniha se Vam bude
hodit, i když si z ní odnesete hlavně poznatek, že sokety jsou tady proto, aby bylo
na čem demonstrovat dokonalý asynchronní návrhový vzor. :) Jste-li pokročilý vývojář
a v knize hledáte neotřelé rady starých zkušených harcovníků, schovejte peněženku,
zamáčkněte slzu kanoucí za odpíraným poznáním a vyberte si jiný titul.<br />
Anotace<br />
Název: Network Programming For the Microsoft .Net Framework<br />
Autoři: Jones, A; Ohlund, J; Olson, L;<br />
Nakladatelství: Microsoft Press 2004
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=262cc8c0-dadd-426c-868e-281bb27d4f2f" />
      </body>
      <title>Kniha Network programming for the Microsoft .Net Framework</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</guid>
      <link>http://blog.renestein.net/Kniha+Network+Programming+For+The+Microsoft+Net+Framework.aspx</link>
      <pubDate>Fri, 14 May 2004 19:05:00 GMT</pubDate>
      <description>
		&lt;p&gt;
Kniha Network programming for the Microsoft .Net Framework je úvodem do síťového programování.
Slovo úvodem bych zdůraznil, protože žádné rozsáhlé případové studie v ní nenaleznete.&lt;br /&gt;
Po obligátním a povrchním úvodu do .Net Frameworku, nás autoři seznámí se “streamy”
a pochopitelně se soustředí na třídu NetworkStream. Následuje popis práce s thready
a ukázky asynchronního návrhového vzoru (metody Begin*, End*)- i když je problematice
věnováno plných 19 stran, nečekejte žádné "best practices", ale spíše upovídaný přepis
toho, co je v MSDN. Ukázek asynchronního návrhového vzoru je v celé knize hříšně opulentní
množství , takže tato kapitola je jen "lákavou" návnadou.&lt;br /&gt;
Dále je v knize vysvětlen význam serializace a probrány jsou XML, binární a SOAP serializace.
Když už je serializace probírána do takových detailů, jakými jsou XML atributy, mohla
být zmíněna i dynamická redefinice atributů za asistence třídy XmlAttributeOverrides.&lt;br /&gt;
Lehký úvod do jmenného prostoru System.Net, jehož smysl mi v kompozici knihy uniká,
je vystřídán popisem protokolů IPV4 a IPV6 a metod třídy DNS. Tato kapitola mi připadá
z celé knihy nejpovedenější, protože z ní čiší, že její autor své téma podrobně zná,
ale přitom dokáže na vyhrazeném prostoru vybrat to podstatné a nezabíhat do zdržujících
detailů.&lt;br /&gt;
Následující dvě kapitoly tvoří jádro knihy, protože se zabývají klientskými a serverovými
sokety a také jejich nadstavbami s jednodušším API (TcpClient, TcpListener). Bohužel
tyto kapitoly trpí také největší nevyvážeností ve zpracování tématu. Přístup autorů
kolísá od pasivního přejímání informací z MSDN k neustálému zdůrazňování, že pro většinu
synchronních metod existují jejich asynchronní doplňky. Když jsem se tuto zajímavou
informaci dověděl potřetí a prohlédl si další úmorný Step By Step příklad určený pravděpodobně
programátorům po akutní lobotomii provedené brokovnicí, měl jsem chuť připojit se
dobře cíleným výstřelem k zástupu šťastných idiotů, abych dokázal kapitoly dočíst.
Tam, kde by měla být tématika zpracována velmi prodrobně i s ukázkami, se autoři omezí
na shrnující tabulky, jejichž pravděpodobně jediným smyslem je rychlé navýšení počtu
popsaných normostran. Moje výtka směřuje hlavně k zcela nedostatečné dokumentaci enumerace
SocketOption.&lt;br /&gt;
Kromě TCP/IP protokolu jsou zde i ukázky UDP protokolu a implementace takzvaných "Raw"
soketů. "Raw" sokety jsou vysvětleny na příkladu ICMP protokolu (což není nic jiného
než všem důvěrně známý PING). Slušelo by se zmínit, že na Windows 2000 a XP mohou
"Raw" sokety otevřít pouze administrátoři. (ping.exe může spustit každý uživatel,
jde asi o jedinou výjimku).&lt;br /&gt;
Důležitost tříd WebClient, WebResponse a WebRequest je vyzdvižena v kapitole nazvané
"Using the Network". Tato kapitola je povedená, i když zde asi nenaleznete nic překvapivého.
Zmíněny jsou cookies, různé způsoby autentizace, certifikáty, SSL.&lt;br /&gt;
Z dalších kapitol rychle získáte pocit, že se autoři zavázali dodat dílko o vyšším
počtu stran, a proto zařadili témata jako jsou Web Services a .Net Remoting. Sice
jsou vždy naťuknuty pokročilé vlastnosti (SOAP extenze, Channel sinks), ale z jejich
odfláknutého vysvětlení si začátečník bude brzy zoufat a slabší nátura se k těmto
konceptům kvůli neumětelství autorů již nikdy nevrátí. Jako leitmotiv knihy:) se zde
objevuje podrobné vysvětlení asynchronního volání WWW služeb.&lt;br /&gt;
Autoři se také s těžko pochopitelnou vervou pustí i do vysvětlování Code Acces Security.
Jejich snaha se ale omezí na výčet oprávnění a hrubý přehled významu konstitutivních
složek CAS, takže kdybych se s CAS setkal poprvé, získám mylný dojem, že CAS je nesmysl
bez jakékoli užitné hodnoty. Jsme také poučeni, že bychom měli komunikaci mezi sokety
kryptovat, protože svět plný hackerů čeká na naše pakety. Děkuji za osvětu, hned se
cítím jako up-to-date vývojář, teď si najdu jen ve slovníku cizích slov význam termínu
kryptovat, abych ty hackery svými programy sejmul. :)&lt;br /&gt;
Doporučení pro psaní výkonných aplikací jsou shrnuta v mozaice nazvané "Network performance
and scalability. Zajímavá je hlavně část týkající se doporučení pro používání "Nagle"
algoritmu, ale ani ostatní rady vašim aplikacím neublíží. 
&lt;br /&gt;
Zcela do počtu je kratičká poslední kapitola Advancements in .Net Framework programming,
jejíž originální teze by se dala shrnout "Nebojte se, v příští verzi bude zase vše
lepší, výkonnější a bezpečnější".&lt;br /&gt;
Co říci závěrem? Jestliže se sokety začínáte a jste úplní zelenáči, kniha se Vam bude
hodit, i když si z ní odnesete hlavně poznatek, že sokety jsou tady proto, aby bylo
na čem demonstrovat dokonalý asynchronní návrhový vzor. :) Jste-li pokročilý vývojář
a v knize hledáte neotřelé rady starých zkušených harcovníků, schovejte peněženku,
zamáčkněte slzu kanoucí za odpíraným poznáním a vyberte si jiný titul.&lt;br /&gt;
Anotace&lt;br /&gt;
Název: Network Programming For the Microsoft .Net Framework&lt;br /&gt;
Autoři: Jones, A; Ohlund, J; Olson, L;&lt;br /&gt;
Nakladatelství: Microsoft Press 2004
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=262cc8c0-dadd-426c-868e-281bb27d4f2f" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</comments>
      <category>.NET Framework</category>
      <category>.Net Remoting</category>
      <category>ASP.NET</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=d8ab0aa4-4f80-4217-9bd3-b568acd25a4c</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,d8ab0aa4-4f80-4217-9bd3-b568acd25a4c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,d8ab0aa4-4f80-4217-9bd3-b568acd25a4c.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d8ab0aa4-4f80-4217-9bd3-b568acd25a4c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
V diskuzních fórech se objevuje mnoho dotazů k .NET Remotingu, ale následující dva
jsou evergreenem. Těm z Vás, kdo záludnosti .Net Remotingu ještě neodhalili sami,
nabízím řešení a doufám, že dotazů ve fórech ubude.:)
</p>
        <p>
          <em>V .Net Frameworku 1.1 dojde při pokusu o komunikaci se vzdáleným objektem k výjimce
SecurityException nebo SerializationException. V .Net Frameworku 1.0 aplikace funguje
bez problémů.</em>
        </p>
        <p>
.Net Framework 1.1 z bezpečnostních důvodů nepovoluje ve výchozí konfiguraci deserializaci
všech typů, takže k výjimce dojde například při předání potomka třídy MarshalByRefObject
z klienta na server nebo při registraci delegáta k události. Řešením je nastavit u
objektu formatter, který provádí (de)serializaci, že povolujeme deserializaci všech
typů. Úroveň deserializace vyjadřuje enumerace TypeFilterLevel a chování shodného
s verzí 1.0 dosáhneme použitím hodnoty Full. Hodnotu Full přiřadíme objektu formatter
(přesněji poskytovateli objektu formatter) v konfiguračním souboru nebo přímo v kódu.
Nastavení úrovně full musí být provedeno na serveru a když používáte zpětná volání
(callback) nebo události, tak musíte úroveň Full nastavit i na klientovi. Nezapomeňte,
že byste měli zprávy mezi klientem a serverem přenášet přes https nebo je alespoň
kryptovat.
</p>
        <p>
          <strong>
            <font size="4">Nastavení v konfiguračním souboru</font>
          </strong>
        </p>
        <p>
          <strong>
            <font size="2">
              <hr id="null" />
            </font>
          </strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>
            <font size="2">Server</font>
          </strong>
        </p>
        <p>
          <font size="2">&lt;configuration&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;system.runtime.remoting&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;application&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;channels&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;channel ref="http" port="7777"&gt; </font>
        </p>
        <p>
          <font size="2"> &lt;serverProviders&gt; </font>
        </p>
        <p>
          <font size="2"> &lt;provider ref="wsdl" /&gt; </font>
        </p>
        <p>
          <font size="2">
            <strong>&lt;formatter ref="soap" typeFilterLevel="Full" /&gt; </strong>
          </font>
        </p>
        <p>
          <strong>
            <font size="2"> &lt;formatter ref="binary" typeFilterLevel="Full" /&gt;</font>
          </strong>
        </p>
        <p>
          <font size="2"> &lt;/serverProviders&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;/channel&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/channels&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/application&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/system.runtime.remoting&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/configuration&gt;</font>
        </p>
        <p>
          <strong>
            <font size="2">Klient</font>
          </strong>
        </p>
        <p>
          <font size="2">&lt;configuration&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;system.runtime.remoting&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;application&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;channels&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;channel ref="http" port="0"&gt; </font>
        </p>
        <p>
          <font size="2"> &lt;clientProviders&gt; </font>
        </p>
        <p>
          <font size="2"> &lt;formatter ref="binary" /&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;/clientProviders&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;serverProviders&gt; </font>
        </p>
        <p>
          <font size="2">
            <strong> &lt;formatter ref="binary" typeFilterLevel="Full" /&gt;</strong>
          </font>
        </p>
        <p>
          <font size="2"> &lt;/serverProviders&gt; </font>
        </p>
        <p>
          <font size="2"> &lt;/channel&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;/channels&gt;</font>
        </p>
        <p>
          <font size="2"> &lt;/application&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/system.runtime.remoting&gt;</font>
        </p>
        <p>
          <font size="2">&lt;/configuration&gt;</font>
        </p>
        <p>
        </p>
        <hr id="null" />
        <p>
        </p>
        <p>
          <font size="2">
            <strong>Nastavení v kódu</strong>
          </font>
        </p>
        <p>
        </p>
        <hr id="null" />
        <p>
        </p>
        <p>
          <font face="Tahoma">
            <font size="2">BinaryServerFormatterSinkProvider binProvider
= new BinaryFormatterSinkProvider();<br /><strong>binProvider.TypeFilterLevel = TypeFilterLevel.Full;</strong></font>
          </font>
        </p>
        <p>
          <font face="Tahoma">
            <font size="2">SoapServerFormatterSinkProvider soapProvider =
new SoapServerFormatterSinkProvider();<br /><strong>soapProvider.TypeFilterLevel = TypeFilterLevel.Full;</strong></font>
          </font>
        </p>
        <p>
        </p>
        <hr id="null" />
        <p>
        </p>
        <em>Za další otázkou se skrývá záludnější problém. Při použití http kanálu, binárního
formatteru (formátovač mi nějak do pera nejde) a hostování vzdáleného objektu v IIS
dostanete na klientovi občas následující výjimku. </em>
        <p class="code">
          <em>An unhandled exception of type 'System.Runtime.Serialization. SerializationException'
occurred in mscorlib.dll<br xmlns:msxml="urn:schemas-microsoft-com:xslt" />
Additional information: BinaryFormatter Version incompatibility. Expected Version
1.0. Received Version &lt;nesmyslné číslo&gt;</em>
        </p>
        <p class="code">
          <em>
          </em>
        </p>
        <p class="code">
Matoucí je hlavně nesmyslné číslo na konci, které zcela evidentně nepředstavuje žádnou
známou verzi formatteru a tedy nelze jednoduše nalézt pravou příčinu nepovedené deserializace.
Vysvětlení je prosté - došlo k chybě na úrovni IIS a klientovi se vrátí chybové http
hlášení (například HTTP/1.1 500 Internal server error), protože WWW server/vzdálený
objekt není z nějakého důvodu dostupný. Bohužel formatter se snaží nalézt v této zprávě
hlavičku s verzí formatteru použitého na serveru a protože ji nalézt nemůže, vyhodí
matoucí hlášku, že našel nesmyslnou verzi, jejíž číslo vezme bůhvíkde.
</p>
        <p class="code">
Pastí je v .Net Remotingu více, klidně mi napište, s jakými problémy jste se setkali
vy, a já připravím pokračování poradny:)
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=d8ab0aa4-4f80-4217-9bd3-b568acd25a4c" />
      </body>
      <title>Dva nejčastější dotazy k .NET Remotingu</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,d8ab0aa4-4f80-4217-9bd3-b568acd25a4c.aspx</guid>
      <link>http://blog.renestein.net/Dva+Nej%c4%8dast%c4%9bj%c5%a1%c3%ad+Dotazy+K+NET+Remotingu.aspx</link>
      <pubDate>Sun, 02 May 2004 17:08:00 GMT</pubDate>
      <description>
		&lt;p&gt;
V diskuzních fórech se objevuje mnoho dotazů k .NET Remotingu, ale následující dva
jsou evergreenem. Těm z Vás, kdo záludnosti .Net Remotingu ještě neodhalili sami,
nabízím řešení a doufám, že dotazů ve fórech ubude.:)
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;V .Net Frameworku 1.1 dojde při pokusu o komunikaci se vzdáleným objektem k výjimce
SecurityException nebo SerializationException. V .Net Frameworku 1.0 aplikace funguje
bez problémů.&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
.Net Framework 1.1 z bezpečnostních důvodů nepovoluje ve výchozí konfiguraci deserializaci
všech typů, takže k výjimce dojde například při předání potomka třídy MarshalByRefObject
z klienta na server nebo při registraci delegáta k události. Řešením je nastavit u
objektu formatter, který provádí (de)serializaci, že povolujeme deserializaci všech
typů. Úroveň deserializace vyjadřuje enumerace TypeFilterLevel a chování shodného
s verzí 1.0 dosáhneme použitím hodnoty Full. Hodnotu Full přiřadíme objektu formatter
(přesněji poskytovateli objektu formatter) v konfiguračním souboru nebo přímo v kódu.
Nastavení úrovně full musí být provedeno na serveru a když používáte zpětná volání
(callback) nebo události, tak musíte úroveň Full nastavit i na klientovi. Nezapomeňte,
že byste měli zprávy mezi klientem a serverem přenášet přes https nebo je alespoň
kryptovat.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &lt;font size="4"&gt;Nastavení v konfiguračním souboru&lt;/font&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &lt;font size="2"&gt; 
&lt;hr id="null" /&gt;
&lt;/font&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &lt;font size="2"&gt;Server&lt;/font&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;configuration&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;system.runtime.remoting&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;application&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;channels&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;channel ref="http" port="7777"&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;serverProviders&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;provider ref="wsdl" /&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &lt;strong&gt;&amp;lt;formatter ref="soap" typeFilterLevel="Full" /&amp;gt; &lt;/strong&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &lt;font size="2"&gt; &amp;lt;formatter ref="binary" typeFilterLevel="Full" /&amp;gt;&lt;/font&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/serverProviders&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/channel&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/channels&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/application&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/system.runtime.remoting&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt; &lt;font size="2"&gt;Klient&lt;/font&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;configuration&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;system.runtime.remoting&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;application&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;channels&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;channel ref="http" port="0"&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;clientProviders&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;formatter ref="binary" /&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/clientProviders&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;serverProviders&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &lt;strong&gt; &amp;lt;formatter ref="binary" typeFilterLevel="Full" /&amp;gt;&lt;/strong&gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/serverProviders&amp;gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/channel&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/channels&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &amp;lt;/application&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/system.runtime.remoting&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hr id="null" /&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt; &lt;strong&gt;Nastavení v kódu&lt;/strong&gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hr id="null" /&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Tahoma"&gt; &lt;font size="2"&gt;BinaryServerFormatterSinkProvider binProvider
= new BinaryFormatterSinkProvider();&lt;br /&gt;
&lt;strong&gt;binProvider.TypeFilterLevel = TypeFilterLevel.Full;&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Tahoma"&gt; &lt;font size="2"&gt;SoapServerFormatterSinkProvider soapProvider =
new SoapServerFormatterSinkProvider();&lt;br /&gt;
&lt;strong&gt;soapProvider.TypeFilterLevel = TypeFilterLevel.Full;&lt;/strong&gt;&lt;/font&gt; &lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hr id="null" /&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;em&gt;Za další otázkou se skrývá záludnější problém. Při použití http kanálu, binárního
formatteru (formátovač mi nějak do pera nejde) a hostování vzdáleného objektu v IIS
dostanete na klientovi občas následující výjimku. &lt;/em&gt; 
&lt;p class="code"&gt;
&lt;em&gt;An unhandled exception of type 'System.Runtime.Serialization. SerializationException'
occurred in mscorlib.dll&lt;br xmlns:msxml="urn:schemas-microsoft-com:xslt" /&gt;
Additional information: BinaryFormatter Version incompatibility. Expected Version
1.0. Received Version &amp;lt;nesmyslné číslo&amp;gt;&lt;/em&gt; 
&lt;/p&gt;
&lt;p class="code"&gt;
&lt;em&gt; &lt;/em&gt; 
&lt;/p&gt;
&lt;p class="code"&gt;
Matoucí je hlavně nesmyslné číslo na konci, které zcela evidentně nepředstavuje žádnou
známou verzi formatteru a tedy nelze jednoduše nalézt pravou příčinu nepovedené deserializace.
Vysvětlení je prosté - došlo k chybě na úrovni IIS a klientovi se vrátí chybové http
hlášení (například HTTP/1.1 500 Internal server error), protože WWW server/vzdálený
objekt není z nějakého důvodu dostupný. Bohužel formatter se snaží nalézt v této zprávě
hlavičku s verzí formatteru použitého na serveru a protože ji nalézt nemůže, vyhodí
matoucí hlášku, že našel nesmyslnou verzi, jejíž číslo vezme bůhvíkde.
&lt;/p&gt;
&lt;p class="code"&gt;
Pastí je v .Net Remotingu více, klidně mi napište, s jakými problémy jste se setkali
vy, a já připravím pokračování poradny:)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=d8ab0aa4-4f80-4217-9bd3-b568acd25a4c" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,d8ab0aa4-4f80-4217-9bd3-b568acd25a4c.aspx</comments>
      <category>.Net Remoting</category>
    </item>
  </channel>
</rss>