2008-12-02 35 views
6

Tôi đang làm việc trên một giải pháp máy khách-khách hàng sử dụng .NET 2.0 Remoting (kích hoạt máy chủ, định dạng nhị phân qua kênh TCP, Vista Ultimate) cho mục đích giao tiếp. Hiện tại tôi đang lược tả ứng dụng và chạy mọi thứ trên cùng một máy. Tôi nhận thấy rằng nếu tôi khởi động ứng dụng, mọi thứ chỉ hoạt động tốt trong vài phút và sau đó đột nhiên mỗi cuộc gọi từ xa mất vài giây để thực thi. Tôi đã đăng nhập vào cả hai đầu và đồng hồ mỗi cuộc gọi. Việc triển khai thực hiện của máy chủ chỉ mất một phần nhỏ trong một giây để thực thi, trong khi toàn bộ cuộc gọi từ xa chậm. Hơn nữa profiling cho thấy rằng remoting suy giảm về phía máy chủ: trong khi bên trong làm việc của dịch vụ từ xa thực hiện trong một phần nhỏ của một giây, các phản ứng rất chậm. Nếu tôi khởi động lại tất cả mọi thứ máy chủ trở lại bình thường trong vài phút nữa.Hiệu suất từ ​​chối xuống cấp theo thời gian

Có ai có trải nghiệm điều gì giống như vậy không?

Cảm ơn!

CẬP NHẬT: Tôi đã kiểm tra, nếu tôi định cấu hình tuổi thọ cho đối tượng ở xa của mình, ví dụ: 1 ngày, tôi vẫn gặp sự cố tương tự.

CẬP NHẬT: Tôi đang sử dụng mẫu được đề xuất bởi Ingo Ramer (HOWTO: Use Interface-based remote objects with config files) cho tất cả nội dung từ chối của tôi, nếu điều này tạo ra bất kỳ sự khác biệt nào.

Khách hàng mã:

public static object CreateInstance(Type type) 
{ 
    if (!Initialized) 
     InitWellKnownTypesCache(); 

    WellKnownClientTypeEntry typeEntry = (WellKnownClientTypeEntry)wellKnownTypesCache[type]; 
    if (null == typeEntry) 
     throw new RemotingException("Type not found."); 

    if (string.IsNullOrEmpty(serverObjectActivationUri)) 
     throw new RemotingException("ServerObjectActivationUri wasn't configured. Cannot create server object instance."); 

    return Activator.GetObject(typeEntry.ObjectType, string.Format(serverObjectActivationUri, typeEntry.ObjectUrl)); 
} 

Server side không có gì nhưng tập tin cấu hình thích hợp trông giống như:

 <service> 
      <wellknown 
       mode="Singleton" 
       type="MyDomain.SomeDomain, MyDomain" 
       objectUri="SomeDomainService" 
      /> 

Tôi không làm bất cứ điều gì ngoài RemotingConfi guration.Configure ("MyDomainService.exe.config", sai); không phải trong máy chủ của tôi và mã máy khách.

+0

Bạn đã lược tả cả hai đầu bằng ANT hoặc một trình lược tả tương tự? –

+0

Tôi đăng nhập thời gian cho mỗi cuộc gọi. – wasker

+0

Tải trọng là gì? Nói cách khác, bạn có thể chia sẻ giao diện của máy chủ với chúng tôi không? Dữ liệu bạn đang truyền qua lại là gì? Nó đang phát triển? Có serialization nặng tham gia? Ứng dụng của bạn đang làm gì khác? Nó trở thành I/O-ràng buộc? Thread-bound? Bộ nhớ bị ràng buộc? – dviljoen

Trả lời

0

Không bao giờ. Bạn đang làm điều gì đó gây ra thêm trường hợp của lớp remoting của bạn để được đăng ký/instantiated ??

+0

Tôi không nghĩ vậy. Tôi đang sử dụng các mô hình được đề xuất bởi Ingo Ramer (http://tinyurl.com/5u8fjq) cho tất cả các công cụ remoting của tôi, nếu điều này làm cho bất kỳ sự khác biệt. – wasker

0

Xem nhanh mã của bạn hoặc tập hợp con, cũng sẽ hữu ích.

1

Sử dụng một số công cụ giám sát mạng như Wireshark để xem sự cố của bạn có liên quan đến mạng hoặc đồng bộ hóa máy chủ hay không.

Nếu chứng minh rằng đó không phải là sự cố mạng, hãy thử đính kèm đồng bộ hóa tùy chỉnh đơn giản trong chuỗi (ngay trước kênh) để ghi nhật ký và nhận thời gian giữa các móc.

0

Bạn có tài trợ các đối tượng được truy cập từ xa của bạn với nhà tài trợ khách hàng không?

+0

Tôi không thực hiện điều này một cách rõ ràng. Như tôi đã mô tả trong câu hỏi của mình, tôi đã cố gắng chơi với các cài đặt toàn thời gian phía máy chủ mà không có kết quả. Tôi cũng đã đăng một số mã. Hy vọng nó sẽ giúp. – wasker

0

Tôi đã thay đổi loại kênh từ xa của mình từ tcp thành http, trong khi vẫn để định dạng nhị phân. Tôi có thể thấy sự suy giảm tương tự trong vài phút không hoạt động, nhưng không giống như các kênh tcp, sau khi khách hàng thực hiện cuộc gọi từ xa "chậm", máy chủ "tỉnh dậy" và tất cả các cuộc gọi tiếp theo đều nhanh, cho đến khi không hoạt động và máy chủ tiếp theo lại đi ngủ.

Không có cách nào là giải pháp, nhưng ít nhất là một số cách giải quyết khác.

0

Nó có thể liên quan đến thời gian thuê trọn đời. Một đối tượng Singleton tùy thuộc vào hợp đồng thuê trọn đời đã được chỉ định cho nó, vì vậy nó có thể được tái chế ngay cả khi khách hàng hiện đang giữ tham chiếu đến nó. Bạn có thể tạo kiểu đối tượng Singleton cũ bằng cách ghi đè phương thức InitializeLifetimeService của MarshalByRefObject.

0

Bạn có thể thử MTAThread thuộc tính cho lớp học của bạn, chỉ cần một ý nghĩ ..

0

Bạn có một cách tình cờ làm cho số lượng lớn người truy cập từ xa các cuộc gọi? Nếu bạn đang thực hiện các cuộc gọi đủ nhanh, bạn có thể chạy hết đề tài để xử lý các yêu cầu.

Đó có lẽ không phải là vấn đề của bạn, nhưng tôi đã gặp phải vấn đề đó trước đó nên tôi nghĩ tôi đã vượt qua điều đó.

+0

Không, nó giống như tối đa 5 cuộc gọi trong khi thử nghiệm của tôi. – wasker

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