یکی از مشکلاتی که همیشه در آزمایش و راهبری پروتکل ECE به وجود میآید مشکلات مربوط به ارسال/دریافت ایمیل است. متاسفانه امکانات اولیه کلاسها و کامپوننتهای این کار اطلاعات چندان کاملی از خطای رخ داده به دست نمیدهند و گاها به یک خطای timed out بسنده میکنند. به عنوان مثال به خطای زیر که حاصل اجرای عملیات ارسال ایمیل با کلاس SmtpClient است توجه فرمایید:
(SendingMailException): The operation has timed out.,
(SmtpException): The operation has timed out.,
در این جور مواقع میتوانید کلیه فعالیتهای System.Net را زیر نظر بگیرید، شاید که مشکل ارسال/دریافت ایمیل را پیدا کردید. دقت کنید که با انجام این کار هر فعالیتی که بر روی TCP/IP انجام گیرد log شده و حجم فایل log در یک چشم به هم زدن به چندین مگابایت خواهد رسید. علاوه بر این پیدا کردن اطلاعات مورد نظر در این حجم زیاد اطلاعات کار چندان سادهای نیست. در ادامه بخشی از این اطلاعات به عنوان نمونه آمده است:
System.Net.Sockets Verbose: 0 : [2616] Socket#23006966::Send()
System.Net.Sockets Verbose: 0 : [2680] Socket#23006966::Dispose()
System.Net.Sockets Error: 0 : [2616] Exception in the Socket#23006966::Send – A blocking operation was interrupted by a call to WSACancelBlockingCall
System.Net.Sockets Verbose: 0 : [2616] Exiting Socket#23006966::Send() -> 0#0
System.Net Error: 0 : [2616] Exception in the SmtpClient#49662634::Send – Unable to write data to the transport connection: A blocking operation was interrupted by a call to WSACancelBlockingCall.
حال برای فعال کردن «خطایابی» در برنامه خودتان کافی است کد زیر را به web.config یا app.config خود اضافه کنید. این کد در بالاترین سطح و درست زیر <configuration> اضافه میشود. همان جایی که <appSettings> و <system.web> قرار دارند:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" >
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="d:usersSystem.Net.trace.log"/>
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</system.diagnostics>
Comments
سلام و خسته نباشید.
ممنون مقاله مفید و خوبی بود.