Tôi đã thử hai cách kết nối với workitemstore cho máy chủ TFS mà chúng tôi đang chạy. Cố gắng A là kết nối với máy chủ cấu hình và sử dụng phương thức GetService<WorkItemStore>()
. Điều này luôn trả về null.Làm thế nào để kết nối thành công với kho lưu trữ workwork TFS 2010?
Cố gắng B đã kết nối với TfsTeamProjectCollection và sử dụng phương thức GetService<WorkItemStore>()
hoặc chuyển bộ sưu tập dự án vào hàm tạo WorkItemStore. Khi thử B, tôi nhận được một ngoại lệ cho biết "Lỗi HRESULT E_FAIL đã được trả về từ một cuộc gọi đến một thành phần COM." Thông tin duy nhất tôi có thể tìm thấy trên đó dường như chỉ ra một số vấn đề về quyền, nhưng tôi đã xác nhận rằng tôi đã được xác thực là người dùng có quyền truy cập đọc vào toàn bộ bộ sưu tập dự án và tôi kết nối và can thiệp một cách thích hợp thông qua bản xem trước dev 2011 của VS.
Đây là cách tôi đang kết nối ...
public TfsConfigurationServer GetConfigurationServer()
{
Uri tfsUri = new Uri(configs.TfsUri);
TfsConfigurationServer server = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri, credProvider);
server.Authenticate();
if (server.HasAuthenticated == false)
throw new InvalidOperationException("You can't authenticate against the tfs instance.");
return server;
}
public TfsTeamProjectCollection GetProjectCollectionInstance(string projectCollectionName)
{
Uri tfsUri = new Uri(configs.TfsUri + "/" + projectCollectionName);
TfsTeamProjectCollection collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri, credProvider);
collection.Authenticate();
if (collection.HasAuthenticated == false)
throw new InvalidOperationException("You can't authenticate against the tfs instance.");
return collection;
}
và dưới đây là cách tôi đang cố gắng để có được những WorkItemStore (mã ngớ ngẩn để minh họa cho vấn đề) ...
public WorkItemProvider()
{
if (workItems == null)
workItems = ServerProvider.ServerInstance.GetService<WorkItemStore>();
if (workItems == null)
workItems = ServerProvider.ProjectCollectionInstance.GetService<WorkItemStore>();
if (workItems == null)
workItems = new WorkItemStore(ServerProvider.ProjectCollectionInstance);
if (workItems == null)
throw new NullReferenceException("Couldn't load work item store.");
}
tôi không phải trên cùng một miền với máy chủ, nhưng tôi xác thực là người dùng miền với ICredentialsProvider và tôi đã xác nhận rằng tôi đã được xác thực là người dùng đó. Bất kỳ con trỏ nào cũng hữu ích.
Thông tin bổ sung: Mã giống nhau hoạt động tốt trên máy tính trong miền của chúng tôi bằng cách sử dụng xác thực cửa sổ và mạo danh. Tôi đoán tôi không thể làm điều này từ bên ngoài miền? Tôi có thể từ Visual Studio, do đó, không có ý nghĩa. Có lẽ nếu tôi có thể mạo danh người dùng miền ngay cả khi tôi không ở trên miền? – sonicblis