100165480.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 260 行 · 第 1/4 页

HTM
260
字号
<h4 style="FTEL: 21.45pt"><span lang="EN-US">3. </span><span style="FONT-FAMILY: 黑体">已知对象的客户机配置</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">对于已知对象而言,必须在客户机配置文件</span><span lang="EN-US">wellknown_Client.config</span><span style="FONT-FAMILY: 宋体">中指定程序集和信道。远程对象的类型可以在程序集</span><span lang="EN-US">RemoteHello.dll</span><span style="FONT-FAMILY: 宋体">中找到,</span><span lang="EN-US">Hi</span><span style="FONT-FAMILY: 宋体">是信道中对象的名称,远程类型</span><span lang="EN-US">Wrox.ProfessionalCSharp.Hello</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">URI</span><span style="FONT-FAMILY: 宋体">是</span><span lang="EN-US">tcp://localhost:6791/Hi</span><span style="FONT-FAMILY: 宋体">。在客户机中,也使用</span><span lang="EN-US">TCP</span><span style="FONT-FAMILY: 宋体">信道,但是在客户机中不指定端口号,因此可以任意挑选未使用的端口号:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;configuration&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;system.runtime.remoting&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;application FTEL=&quot;Client&quot;&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;client displayFTEL=&quot;Hello client for well-known objects&quot;&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wellknown type = &quot;Wrox.ProCSharp.Remoting.Hello, RemoteHello&quot; </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url=&quot;tcp://localhost:6791/Hello/Hi&quot; /&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/client&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channels&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channel ref=&quot;tcp&quot; displayFTEL=&quot;TCP Channel (HelloClient)&quot; /&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/channels&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/application&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;/system.runtime.remoting&gt;</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;/configuration&gt;</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">配置文件中的一个小小改动是使用了</span><span lang="EN-US" style="COLOR: black">HTTP</span><span style="COLOR: black; FONT-FAMILY: 宋体">信道</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">如</span><span lang="EN-US" style="COLOR: black">WellknownHttp_Client.config</span><span style="COLOR: black; FONT-FAMILY: 宋体">所示</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;client&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wellknown type=&quot;Wrox.ProCSharp.Remoting.Hello, RemoteHello&quot; </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url=&quot;http://localhost:6792/Hello/Hi&quot; /&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/client&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channels&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channel ref=&quot;http&quot; displayFTEL=&quot;HTTP Channel (HelloClient)&quot; /&gt;</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/channels&gt;</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">4. </span><span style="FONT-FAMILY: 黑体">客户激活的对象的服务器配置</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">只需改变配置文件</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">它可以在</span><span lang="EN-US">clientactivated_Server.config</span><span style="FONT-FAMILY: 宋体">中找到</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,就可以把服务器配置从服务器激活的对象改为客户激活的对象。在这里指定的是元素</span><span lang="EN-US">&lt;service&gt;</span><span style="FONT-FAMILY: 宋体">的子元素</span><span lang="EN-US">&lt;activated&gt;</span><span style="FONT-FAMILY: 宋体">。使用</span><span lang="EN-US">&lt;activated&gt;</span><span style="FONT-FAMILY: 宋体">元素对服务器进行配置时,必须指定</span><span lang="EN-US">type</span><span style="FONT-FAMILY: 宋体">特性。元素</span><span lang="EN-US">application</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">name</span><span style="FONT-FAMILY: 宋体">特性用于定义</span><span lang="EN-US">URI</span><span style="FONT-FAMILY: 宋体">:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;configuration&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;system.runtime.remoting&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;application FTEL=&quot;HelloServer&quot;&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;service&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;activated type=&quot;Wrox.ProCSharp.Remoting.Hello, RemoteHello&quot; /&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/service&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channels&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel ref=&quot;http&quot; port=&quot;6788&quot; </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayFTEL=&quot;HTTP Channel (HelloServer)&quot; /&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channel ref=&quot;tcp&quot; port=&quot;6789&quot; </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayFTEL=&quot;TCP Channel (HelloServer)&quot; /&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/channels&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/application&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;/system.runtime.remoting&gt;</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;/configuration&gt;</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">5. </span><span style="FONT-FAMILY: 黑体">客户激活的对象的客户端配置</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">配置文件</span><span lang="EN-US">clientactivated_Client.config</span><span style="FONT-FAMILY: 宋体">使用</span><span lang="EN-US">&lt;client&gt;</span><span style="FONT-FAMILY: 宋体">元素的</span><span lang="EN-US">url</span><span style="FONT-FAMILY: 宋体">特性和</span><span lang="EN-US">&lt;activated&gt;</span><span style="FONT-FAMILY: 宋体">元素的</span><span lang="EN-US">type</span><span style="FONT-FAMILY: 宋体">特性定义客户激活的远程对象:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;configuration&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;system.runtime.remoting&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;application&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;client url=&quot;http://localhost:6788/HelloServer&quot; </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;displayFTEL=&quot;Hello client for client-activated objects&quot;&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;activated type=&quot;Wrox.ProCSharp.Remoting.Hello, RemoteHello&quot; /&gt;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/client&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channels&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;channel ref=&quot;http&quot; displayFTEL=&quot;HTTP Channel (HelloClient)&quot; /&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel ref=&quot;tcp&quot; displayFTEL=&quot;TCP Channel (HelloClient)&quot; /&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/channels&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/application&gt;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; &lt;/system.runtime.remoting&gt;</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">&lt;/configuration&gt;</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">6. </span><span style="FONT-FAMILY: 黑体">使用配置文件的服务器代码</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在服务器代码中,必须使用</span><span lang="EN-US">RemotingConfiguration</span><span style="FONT-FAMILY: 宋体">类的静态方法</span><span lang="EN-US">Configure()</span><span style="FONT-FAMILY: 宋体">配置远程服务。这里定义的所有信道都已建立和实例化。如果要从服务器应用程序中了解信道配置的信息,则可以创建静态方法</span><span lang="EN-US">ShowActivatedServiceTypes()</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">ShowWellKnownService Types()</span><span style="FONT-FAMILY: 宋体">,它们在载入和启动远程配置之后调用:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">public static void Main(string[] args)</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; RemotingConfiguration.Configure(&quot;HelloServer.exe.config&quot;);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; Console.WriteLine(&quot;Application: &quot; + RemotingConfiguration.ApplicationName);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; ShowActivatedServiceTypes();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; ShowWellKnownServiceTypes();</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; System.Console.WriteLine(&quot;press return to exit&quot;);</span></p>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?