2010-05-13 15 views
9

पर प्रमाणीकरण मुझे एमएस टीम फाउंडेशन सर्वर पर एक विशिष्ट उपयोगकर्ता के रूप में प्रमाणित करने में समस्या हो रही है। पुराने संस्करणों में यह इस तरह दिखेगा:टीएफएस 2010

teamFoundationCredential = new System.Net.NetworkCredential("<USERNAME>", "<PASSWORD>", "<DOMAIN>"); 

TeamFoundationServer tfs = new TeamFoundationServer("http://mars:8080/", teamFoundationCredential); 

क्या कोई मुझे 2010 संस्करण के लिए समतुल्य बता सकता है। अब तक मेरे पास है:

ICredentialsProvider cred = null; 

tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefualtCollection")); 

tfs.EnsureAuthenticated(); 

धन्यवाद

उत्तर

13

TFS 2010 के लिए निम्नलिखित का उपयोग करें:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(
     new Uri("http://asebeast.cpsc.ucalgar.ca:8080/tfs/DefaultCollection", 
     new System.Net.NetworkCredential("domain_name\\user_name", "pwd")); 
collection.EnsureAuthenticated(); 
+1

नोट यह एक गैर-डोमेन सर्वर पर मेरे लिए काम किया है, तो मैं उपयोगकर्ता नाम की 'domain_par' अनुभाग हटा दिया। – Simon

+1

मेरी इच्छा है कि मैं लगभग सौ गुना बढ़ा सकता हूं। – theo

+1

भी: आपको नेटवर्क क्रेडिट ("उपयोगकर्ता नाम", "पासवर्ड", "डोमेन") की बजाय नेटवर्क क्रेडेंशियल ("उपयोगकर्ता नाम", "पासवर्ड", "डोमेन") की आवश्यकता है। यह मेरे लिए पहला तरीका है, लेकिन दूसरा नहीं। – theo

4

मैं एक ही समस्या हो रही किया गया है। उपरोक्त समाधान मेरे लिए काम नहीं करता है और वास्तव में क्यों नहीं समझ सकता है। मैं एक कास्ट अपवाद मिल रहा है। इस दिन इसे समझने की कोशिश कर रहे एक दिन बिताएं - इसलिए सोचा कि मैं अपनी वर्तमान कार्यवाही को समस्या में साझा करूंगा। मैं अपने खुद के आंतरिक वर्ग कि ICredentialsProvider लागू करता बना लिया है - के रूप में नीचे:

private class MyCredentials : ICredentialsProvider 
{ 
    private NetworkCredential credentials; 
    #region ICredentialsProvider Members 
    public MyCredentials(string user, string domain, string password) 
    { 
     credentials = new NetworkCredential(user, password, domain); 
    } 

    public ICredentials GetCredentials(Uri uri, ICredentials failedCredentials) 
    { 
     return credentials; 
    } 

    public void NotifyCredentialsAuthenticated(Uri uri) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

मैं तो इस दृष्टांत और नीचे के रूप में में इसे पारित:

MyCredentials credentials = new MyCredentials(UserName, Password, Domain); 
TfsTeamProjectCollection configurationServer = 
    TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
     new Uri(tfsUri), credentials); 

ध्यान दें कि मैं लागू नहीं किया है NotifyCredentialsAuthenticated - यह सुनिश्चित नहीं है कि यह वास्तव में क्या करता है, इसलिए वहां पर NotImplementedException को छोड़ दिया गया ताकि जब मैं इसे बुलाया तो मैं पकड़ सकता था, जो अब तक नहीं हुआ है। अब सफलतापूर्वक टीएफएस से जुड़ा हुआ है।

+1

आपको नेटवर्क क्रेडेंशियल ("उपयोगकर्ता नाम \\ डोमेन", "पासवर्ड) के बजाय केवल नए नेटवर्क क्रेडेंशियल (" उपयोगकर्ता नाम "," पासवर्ड "," डोमेन ") करने की आवश्यकता हो सकती है। – theo

+0

यह मेरे लिए काम करता है। – AMissico

0

मैं भी इस पद्धति का उपयोग हमारे पुराने TFS 2008 सर्वर से कनेक्ट होने में कुछ समस्या थी गया है, लेकिन बात यह है कि मेरे मामले हल वास्तव में आसान था:

सबसे पहले मैं TFS यूआरएल परिभाषित होने के लिए:

private const string Tfs2008Url = @"http://servername:8080/tfs/"; 
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url); 

यूआरएल में इस्तेमाल किया जाने वाला पथ वह है जिसे हम विजुअलस्टूडियो के माध्यम से कनेक्ट करते समय उपयोग करते हैं, इसलिए मैंने सोचा कि यह एपीआई कॉल में समान होना चाहिए, लेकिन जब मैंने निम्नलिखित प्रमाणीकरण के साथ इसका उपयोग करने की कोशिश की, तो मुझे एक टीएफ 31002/404 त्रुटि:

var collection = new TfsTeamProjectCollection(Tfs2008Uri,new NetworkCredential("AdminUser","password","domain_name")); 
collection.EnsureAuthenticated(); 

लेकिन जब मैंने यूआरएल को टीएफएस रूट में बदल दिया, तो यह ठीक प्रमाणित हुआ!

private const string Tfs2008Url = @"http://servername:8080/"; 
static readonly Uri Tfs2008Uri = new Uri(Tfs2008Url); 

पता नहीं है कि इससे किसी की मदद की गई है, लेकिन यह निश्चित रूप से मेरे लिए चाल है!

0

यह मेरे लिए काफी अच्छा काम किया है:

_tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri); 
_tfs.ClientCredentials = new TfsClientCredentials(new WindowsCredential(new NetworkCredential("myUserName", "qwerty_pwd", "myDomainName"))); 
_tfs.EnsureAuthenticated(); 
संबंधित मुद्दे