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>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
listener = new TCPListener(ipAddress, port);</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
listener.Start(); </span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
while (true)</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
Socket socket = listener.AcceptSocket();</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string message = GetRandomQuoteOfTheDay();</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
UnicodeEncoding encoder = new UnicodeEncoding();</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
byte[] buffer = encoder.GetBytes(message);</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
socket.Send(buffer, buffer.Length, 0); </span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
socket.Close();</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
catch (SocketException e)</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;line-height:13.0pt'><span
lang=EN-US>
string message = "Quote Server failed in Listener: " </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>
+ e.Message;</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:13.0pt'><span
lang=EN-US>
eventLog.WriteEntry(message, EventLogEntryType.Error);</span></p>
<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</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>
}</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> 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>
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>
Trace.WriteLine("trace message");</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'> 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> 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>
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> {</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt;line-height:15.0pt'><span
lang=EN-US> 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> 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>
listBoxEvents.Items.Add(time + " " + 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>
}</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'>
32-24</span></p>
</div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165811.htm">上一页</a> <a href="index.html">首页</a> <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 + -
显示快捷键?