2010-06-04 21 views
11

Tôi có một ServiceHost làm việc với một NetTcpBinding duy nhất và một điểm cuối duy nhất.WCF "Instance đã tồn tại trong CounterSet" lỗi khi mở lại ServiceHost

I .Close(). Sau đó, tôi tạo một cá thể ServiceHost mới với cấu hình chính xác giống như cấu hình đầu tiên. Sau đó, khi tôi cố gắng .Open() các trường hợp mới tôi nhận được ngoại lệ rất vụng về này:

System.ArgumentException occurred 
    Message=Instance '[email protected]:||localhost:2718|game|' already exists in CounterSet 'e829b6db-21ab-453b-83c9-d980ec708edd'. 
Parameter name: InstanceName 
    Source=System.Core 
    ParamName=InstanceName 
    StackTrace: 
     at System.Diagnostics.PerformanceData.CounterSetInstance..ctor(CounterSet counterSetDefined, String instanceName) 

Có ai nhìn thấy điều đó chưa? Có phải nó là một lỗi trong .NET Framework (tôi đang sử dụng 4.0, nhân tiện)?

thông tin Có lẽ có liên quan về ServiceHost tôi:

  • Không khách hàng được kết nối với máy chủ, khi nó lần đầu tiên được đóng;
  • Tùy chỉnh IInstanceProvider được sử dụng để tạo các phiên bản;
  • Giá trị ràng buộc của ReliableSession được bật;
  • Loại dịch vụ được đánh dấu bằng ServiceBehavior bên dưới;

.

[ServiceBehavior(
IncludeExceptionDetailInFaults = true, 
InstanceContextMode=InstanceContextMode.PerSession, 
ConcurrencyMode=ConcurrencyMode.Reentrant, 
UseSynchronizationContext = false 
)] 

Tôi đang mở để tiết lộ bất kỳ thông tin bổ sung nào mà bạn có thể muốn biết về ứng dụng.

Cập nhật 1 Tôi đã biên dịch ứng dụng nhắm mục tiêu .NET 3.5 và lỗi không xảy ra. Thật không may, tôi phải tắt tất cả mọi thứ mà dựa vào của Task.

Cập nhật 2 Tôi đã đăng nhập bug at Microsoft Connect về sự cố này. Tôi đoán câu hỏi này đã được trả lời ngay bây giờ.

+0

Bạn có thể cung cấp thông tin theo dõi ngăn xếp đầy đủ không? –

+0

Stacktrace trống trong 'Exception' – jpbochi

Trả lời

7

Đây là lỗi với .NET Framework 4.0. Tôi đã đăng nhập bug at Microsoft Connect về nó.

Dưới đây là câu trả lời từ Microsoft:

này trông giống như một vấn đề gây ra biết bởi vấn đề thời gian trong chặt chẽ Đóng/mở chuỗi các ServiceHost. ServiceHost duy trì một số quầy hiệu suất mà có thể không nhận được rác thu thập dẫn đến ngoại lệ này. Tôi giả sử bạn đang sử dụng .Net Framework 4.0? Vui lòng thử để workaround bằng cách thực hiện một buộc GC trước khi bạn mở thứ hai ServiceHost:

GC.Collect() 
GC.WaitForPendingFinalizers() 

Làm những gì họ khuyên giải quyết vấn đề. Tôi hy vọng nó sẽ được sửa trong bản phát hành sau.

+0

Hoặc đã quay lại. :(Tôi nhận được điều này kể từ lần cập nhật cuối cùng từ MS cho HotFixes bảo mật. Sự khác biệt duy nhất tôi thấy trong mã của tôi là tôi đang sử dụng điểm cuối UDP, thay vì điểm cuối TCP. Thêm workaround GC không giải quyết vấn đề. sẽ xem những gì tôi có thể tìm thấy tại MS –

+1

Đối với tôi giải pháp này đã khắc phục được sự cố. – Ikaso

4

Vấn đề này không liên quan đến bản thân dịch vụ WCF, mà là cho System.ServiceModel.Diagnostics, cho phép giám sát dịch vụ bằng các bộ đếm hiệu suất. Nó tạo ra bộ đếm cho mỗi máy chủ dịch vụ và tạo tên cho thiết lập bởi các thông số ServiceHost. Và, nếu máy chủ có cùng các tham số đã tồn tại - nó sẽ gây ra ngoại lệ này. See Microsoft sources here (được tìm thấy bởi GUID). Thật dễ dàng để aviod nó: chỉ cần tắt bộ đếm hiệu suất cho các dịch vụ:

  1. By app.config (thử nghiệm)

    <configuration> 
        <system.serviceModel> 
         <diagnostics performanceCounters="Off" /> 
        </system.serviceModel> 
    </configuration> 
    
  2. Trong thời gian chạy (không kiểm tra)

    using System.Configuration; 
    using System.ServiceModel.Configuration; 
    using System.ServiceModel.Diagnostics; 
    
    Configuration config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None); 
    ServiceModelSectionGroup sg = ServiceModelSectionGroup.GetSectionGroup(config); 
    sg.Diagnostic.PerformanceCounters = PerformanceCounterScope.Off; 
    config.Save(); 
    

PS Tôi gặp vấn đề này trên VS 2012, .Net 4.5 và VS 2010, .Net 4.0. Tôi nghĩ, nó liên quan đến cấu hình phần mềm (VS?), Nhưng tôi không biết phần mềm nào và tham số nào. Đồng nghiệp của tôi không có vấn đề như vậy bằng cách sử dụng, nói chung, cùng một môi trường.

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