2015-07-20 21 views
7

Tôi đang sử dụng Webjob với SDK lưu trữ Windows Azure. Khi một mục mới xuất hiện trong một Hàng đợi, một phương thức trong lớp của tôi được gọi. Theo số SDK docs, nếu tôi lấy TextWriter làm tham số cho phương thức của mình, SDK sẽ cung cấp cho tôi một TextWriter mà tôi có thể viết để hiển thị trong cơ sở hạ tầng ghi nhật ký của Webjob. Điều này làm cho nó khá dễ dàng để chẩn đoán các vấn đề và khắc phục sự cố.Azure Webjob TextWriter logger đang được xử lý ở giữa phương pháp của tôi

public async static void ProcessQueueMessage([QueueTrigger("queueName")]MyModelType model, TextWriter logger) 
{ 

    await logger.WriteLineAsync(string.Format("Processing Item {0}", model.SasUrl)); 

    // Some work here 

    await logger.WriteLineAsync(string.Format("Done Processing Item {0}", model.SasUrl)); 
} 

Tuy nhiên, rất thường xuyên, trong nội dung phương pháp của tôi, TextWriter đang được xử lý. Tôi nhận được ngoại lệ sau đây vào ngày 2 logger.WriteLineAsync:

System.ObjectDisposedException was unhandled by user code 
    HResult=-2146232798 
    Message=Cannot write to a closed TextWriter. 
    Source=mscorlib 
    ObjectName="" 
    StackTrace: 
     at System.IO.__Error.WriterClosed() 
     at System.IO.StringWriter.Write(Char[] buffer, Int32 index, Int32 count) 
     at System.IO.TextWriter.WriteLine(String value) 
     at System.IO.TextWriter.SyncTextWriter.WriteLine(String value) 
     at System.IO.TextWriter.SyncTextWriter.WriteLineAsync(String value) 
     at NameOfProject.Program.<ProcessQueueMessage>d__8.MoveNext() in c:\Dev\Path\To\Program.cs:line 173 
    InnerException: 

tôi không thể tìm thấy người khác gặp phải vấn đề này, vì vậy tôi không thể tưởng tượng có một lỗi trong SDK hoặc webjobs cơ sở hạ tầng.

Có cách nào để biết liệu nhật ký có được xử lý trước cuộc gọi không?

Có cách nào để tạo trình ghi nhật ký mới trong phương thức của tôi sẽ tham gia vào hệ thống con đăng nhập WebJob và giao diện người dùng không?

+0

Không có gì hiển nhiên đối với tôi, nhưng tôi đoán đó có thể là vấn đề không đồng bộ. Có nhiều lỗi trường hợp góc có thể xảy ra với các ứng dụng giao diện điều khiển tĩnh rỗng không đồng bộ. Bạn có thể thử thả async và nhìn thấy nếu nó repros vẫn? –

+0

Có lý do cụ thể nào để sử dụng async đang đợi bên trong trình xử lý WebJob không? Theo hiểu biết của tôi, công việc web của bạn sẽ được gọi trong một chủ đề khác với chủ đề chính của SDK. Vì vậy, chủ đề chính sẽ không bao giờ bị quấy rầy. –

Trả lời

27

Đó là vì phương thức của bạn trả về void. Hãy thử trả lại Task thay vì

+2

Đã xảy ra lỗi tương tự. Tôi đoán kể từ khi tôi trở về void các thread gọi đã không chờ đợi cho các phương pháp để hoàn thành và trực tiếp xử lý các văn bản nhà văn. Nên được đánh dấu là một giải pháp. – Martin

+0

Cảm ơn bạn! Chỉ cần dành hai giờ cố gắng tìm ra lý do tại sao TextWriter của tôi đã được xử lý. – peregrination

+0

Bất kỳ ý tưởng nào tại sao tôi lại gặp lỗi giống nhau mặc dù tôi không sử dụng async? – Sean

Các vấn đề liên quan