2012-02-06 34 views
6

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.

+0

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

Trả lời

2

Kiểm tra nếu điều này làm những gì bạn cần:

using System; 
using Microsoft.TeamFoundation.Client; 
using Microsoft.TeamFoundation.WorkItemTracking.Client; 

namespace GetsWorkItem 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://<TFS>:8080/tfs/<COLLECTION>")); 
      WorkItemStore workItemStore= (WorkItemStore) teamProjectCollection.GetService(typeof (WorkItemStore)); 

      WorkItem workItem = workItemStore.GetWorkItem(1234); 
     } 
    } 
} 
+1

Hoạt động trong ứng dụng giao diện điều khiển (khi tôi thêm xác thực), không hoạt động trong ứng dụng web của tôi. Lỗi giống như cố gắng B trong câu hỏi của tôi. – sonicblis

+0

Tôi xin lỗi vì nó không hiệu quả với bạn – pantelif

0

Tôi tin this article có thể có thể trả lời câu hỏi của bạn. Nó nói rằng nếu bạn nhanh chóng WorkItemStore của bạn theo một cách hơi khác nhau, bạn sẽ nhận được một ngoại lệ khác nhau:

System.TypeInitializationException: The type initializer for ‘Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore’ threw an exception. —> System.IO.FileLoadException: Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

Việc sửa chữa là một sự thay đổi web.config đơn giản, bằng cách thêm những điều sau đây:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Hy vọng điều này sẽ hữu ích! Làm việc cho tôi khi tôi gặp lỗi tương tự.

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