100165812.htm

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

HTM
590
字号

<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
{</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;
IPAddress ipAddress = Dns.Resolve(&quot;localhost&quot;).AddressList[0];</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;
listener = new TCPListener(ipAddress, port);</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;listener.Start(); </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;
while (true)</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;
{</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;
Socket socket = listener.AcceptSocket();</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;
string message = GetRandomQuoteOfTheDay();</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;
UnicodeEncoding encoder = new UnicodeEncoding();</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;byte[] buffer = encoder.GetBytes(message);</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;
socket.Send(buffer, buffer.Length, 0); </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;
socket.Close();</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;
}</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;
}</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;
catch (SocketException e)</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;
{</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
string message = &quot;Quote Server failed in Listener: &quot; </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><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;
+ e.Message;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
eventLog.WriteEntry(message, EventLogEntryType.Error);</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;
}</span></p>

<p class=a6 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>

<h4 style='FTEL:21.45pt'><span lang=EN-US>6. </span><span
style='font-family:黑体;color:black'>跟踪</span></h4>

<p class=MsoNormal><span style='font-family:宋体'>所有的跟踪消息都可以写到事件日志中。但最好不要这么做,因为在正常运行的系统中,事件日志会因跟踪信息而溢出,系统管理员可能会遗漏重要的日志。对于有疑问的服务,把跟踪消息写到事件日志中有利于对服务进行测试。在调试服务和发布代码时都可以进行跟踪。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>在把跟踪消息发送给事件日志时,必须创建</span><span
lang=EN-US>EventLogTraceListener</span><span style='font-family:宋体'>对象,并把它添加到</span><span
lang=EN-US>Trace</span><span style='font-family:宋体'>类的监听程序列表中:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>&nbsp;&nbsp; EventLogTraceListener listener = new
EventLogTraceListener(eventLog1);</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
Trace.Listeners.Add(listener);</span></p>

<p class=MsoNormal style='line-height:18.0pt'><span style='font-family:宋体;
color:black'>现在,所有的跟踪消息都被发送给事件日志:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;
Trace.WriteLine(&quot;trace message&quot;);</span></p>

<h4 style='FTEL:21.45pt'><span lang=EN-US>7. </span><span
style='font-family:黑体'>创建事件日志监听程序</span></h4>

<p class=MsoNormal style='line-height:18.0pt'><span style='font-family:宋体'>下面编写一个应用程序,在服务出错时接收事件。创建一个简单的</span><span
lang=EN-US>Windows</span><span style='font-family:宋体'>应用程序,让它监视</span><span
lang=EN-US>Quote</span><span style='font-family:宋体'>服务的事件。这个</span><span
lang=EN-US>Windows</span><span style='font-family:宋体'>应用程序只包含一个列表框和一个</span><span
lang=EN-US>Exit</span><span style='font-family:宋体'>按钮,如图</span><span
lang=EN-US>32-23</span><span style='font-family:宋体'>所示。</span></p>

<p align=center style='margin-top:4.9pt'><span lang=EN-US><img width=215
height=178 src="32/image024.jpg"></span></p>

<p align=center style='FTEL:8.15pt'><span style='font-family:宋体;color:black'>图</span><span
lang=EN-US style='color:black'>&nbsp; 32-23</span></p>

<p class=MsoNormal style='line-height:18.0pt'><span style='font-family:宋体'>把</span><span
lang=EN-US>EventLog</span><span style='font-family:宋体'>组件从</span><span
lang=EN-US>Toolbox</span><span style='font-family:宋体'>上拖放到设计视图中,添加这个组件。把</span><span
lang=EN-US>Log</span><span style='font-family:宋体'>属性设置为</span><span lang=EN-US>Application</span><span
style='font-family:宋体'>、</span><span lang=EN-US>Source</span><span
style='font-family:宋体'>属性设置为服务的源</span><span lang=EN-US>QuoteService</span><span
style='font-family:宋体'>。</span><span lang=EN-US>EventLog</span><span
style='font-family:宋体'>类也有一个属性</span><span lang=EN-US>EnableRaisingEvents</span><span
style='font-family:宋体'>。它的默认值是</span><span lang=EN-US>false</span><span
style='font-family:宋体'>。把它设置为</span><span lang=EN-US>true</span><span
style='font-family:宋体'>意味着</span><span lang=EN-US>EntryWritten </span><span
style='font-family:宋体'>事件每次发生时都会生成一个事件,还可以为</span><span lang=EN-US>EntryWritten</span><span
style='font-family:宋体'>事件编写事件处理程序。给这个事件添加处理程序</span><span lang=EN-US
style='color:black'>OnEntryWritten()</span><span style='font-family:宋体;
color:black'>。</span></p>

<p class=MsoNormal style='line-height:18.0pt'><span lang=EN-US
style='color:black'>OnEntryWritten()</span><span style='font-family:宋体;
color:black'>处理程序把</span><span lang=EN-US style='color:black'>EntryWrittenEventArgs</span><span
style='font-family:宋体;color:black'>对象作为参数来接收,从该对象中可以得到事件的所有信息。使用</span><span
lang=EN-US style='color:black'>Entry</span><span style='font-family:宋体;
color:black'>属性,可以得到</span><span lang=EN-US style='color:black'>EventLogEntry</span><span
style='font-family:宋体;color:black'>对象,这个对象包括时间、事件源、类型和种类等信息:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void OnEntryWritten (object
sender, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
System.Diagnostics.EntryWrittenEventArgs e)</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateTime time =
e.Entry.TimeGenerated;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string message =
e.Entry.Message;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
listBoxEvents.Items.Add(time + &quot; &quot; + message);</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}</span></p>



<p class=MsoNormal><span style='font-family:宋体;color:black'>正在运行的应用程序显示出了</span><span
lang=EN-US style='color:black'>QuoteService</span><span style='font-family:
宋体;color:black'>的所有事件,如图</span><span lang=EN-US style='color:black'>32-24</span><span
style='font-family:宋体;color:black'>所示。</span></p>

<p align=center><span lang=EN-US><img width=211 height=173
src="32/image025.jpg"></span></p>

<p align=center style='FTEL:0cm;FTEL:.0001pt'><span
style='font-family:宋体;color:black'>图</span><span lang=EN-US style='color:black'>&nbsp;
32-24</span></p>

</div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165811.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165813.htm">下一页</a>
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165812.htm'><font color='red'>32.6.2  事件日志</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165809.htm'>32.5.5  ServiceController类</a></div><div style='float:right;width:49%'>·<a href='100165810.htm'>32.6  故障排除</a></div><div style='float:left;width:49%'>·<a href='100165811.htm'>32.6.1  交互式服务</a></div><div style='float:right;width:49%'>·<a href='100165813.htm'>32.6.3  性能监视</a></div><div style='float:left;width:49%'>·<a href='100165814.htm'>32.7  电源事件</a></div><div style='float:right;width:49%'>·<a href='100165815.htm'>32.8  小结</a></div></div>
                    </div>
                </div>
                </div>
        </div>
</body>
</html>

⌨️ 快捷键说明

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