Tôi đang cố gắng mở proxy trên một chuỗi (trong nền), luồng tạo một phiên bản proxy mới, gọi phương thức dịch vụ và ngay sau khi phân phát dịch vụ.Bắt đầu nhiều dịch vụ trên các chủ đề
Tất cả điều này xảy ra trên một sợi:
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
Tôi tiếp tục nhìn thấy các vấn đề thời gian chờ liên tục xảy ra mặc dù tôi đã đặt thời gian chờ để tối đa cho CloseTimeout, OpenTimeout, ReceiveTimeout, SendTimeout.
Tôi chỉ muốn đảm bảo thiết kế khôn ngoan đây không phải là vấn đề tức là mở một dịch vụ trên một chủ đề và xử lý nó?
EDIT:
Proxy nội bộ thiết lập kênh có gắn kết tùy chỉnh trên các điểm cuối khác nhau cho mỗi chuỗi.
Đó là một chút bối rối mà bạn nói về "Dịch vụ", nơi tôi mong đợi "Proxy" (hoặc thậm chí "Khách hàng"), ví dụ "thread mở dịch vụ" nên là "thread mở một proxy cho dịch vụ của tôi", phải không? – Jeroen
Xin lỗi, tôi vừa cập nhật câu hỏi, vì vậy về cơ bản dịch vụ của tôi đã mở nhưng có proxy chỉ gọi proxy.Channel.StartWork (khối lượng công việc); của dịch vụ cụ thể đó (đã được tự lưu trữ) - có ý nghĩa không? –
bạn có thể muốn thêm 'final' vào mệnh đề try-catch của mình. cuối cùng thực hiện mã ngay cả khi một ngoại lệ được ném. Về vấn đề của bạn, tôi không chắc chắn. Tôi cũng tin rằng nó sẽ là khôn ngoan để vượt qua ràng buộc của bạn vào các nhà xây dựng. điều này có thể là nguyên nhân của ngoại lệ hết thời gian chờ của bạn. –