這個問題讓我感到頭疼,我不知道這裏發生了什麼。如果您對Windows Live網絡沒有任何經驗,那麼我要求您閱讀本文,也許它與此無關,並且我忽略了與Windows Live網絡完全無關的東西。連接到Windows Live Messenger網絡的不可能的問題
簡而言之:我寫了一個Objective-C類,允許我連接到Windows Live Messenger網絡,名爲WLNotificationSession
。我的工作非常簡單,我設置了username
和password
變量並做了[notificationSession start];
。然後它成功登錄。
比方說,我有兩個Windows Live帳戶。第一個是A,現在登錄。
的問題出現了,當我嘗試火了第二WLNotificationSession
,與其他Windows Live帳戶,B.它總是失敗。用戶名和密碼是100%正確的。當我嘗試首先登錄B時,它會成功。當我在B登錄時嘗試A時,它失敗。 第二次登錄會話總是失敗。
它不能像「在很短的時間內嘗試太多登錄」。當我登錄A時,退出應用程序,重新啓動應用程序並重新登錄A,都嘗試成功。我可以在20秒內做到這一點。但是,當我啓動應用程序時,登錄A,斷開A,等待2小時,登錄B(全部未關閉應用程序),失敗。 (??)
對於那些有WL網絡經驗的人:在Tweener身份驗證過程中發生故障。從登錄服務器獲取「Authentication-Info」或「WWW-Authenticate」HTTP標頭的部分。當它失敗時,我得到這個值: "Www-Authenticate" = "Passport1.4 da-status=failed-noretry,srealm=Passport.NET,ts=-2,prompt,cburl=http://messenger.msn.com/images/logo102x88.gif,cbtxt=.NET%20Messenger%20Service";
我真的很希望有人能幫到這個。謝謝。
UPDATE 這是一些示例代碼。我創建了一個新的項目,在的applicationDidFinishLaunching方法中添加以下代碼,點擊Build &運行:
WLNotificationSession *notificationSession1 = [[WLNotificationSession alloc] init];
notificationSession1.username = @"[email protected]";
notificationSession1.password = @"testpwd";
[notificationSession1 start];
WLNotificationSession *notificationSession2 = [[WLNotificationSession alloc] init];
notificationSession2.username = @"[email protected]";
notificationSession2.password = @"testpwd";
[notificationSession2 start];
notificationSession1總是成功,總是notificationSession2失敗。沒有全局變量或共享變量。
更新2
繼大衛的建議,這個問題可能是cookie相關的,我加入這個代碼到我的項目: [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
我也用他的方法在下面的評論刪除任何cookie之前在每個URL請求之後。這可能是不必要的,但我仍然這樣做。
我認爲在這一點上可以肯定的是,它不是餅乾,或者必須有一些其他地方存儲cookie。
你正在重複使用WLNotificationSession的同一個實例,還是創建一個新的?有可能你有一些狀態變量在登錄嘗試之間沒有被重置。即使你正在使用新的實例,你是否將狀態存儲在靜態變量或全局變量中?或者可能會持續存在的ivars之外的其他地方? – 2010-09-22 00:56:28
這就是你會想到的,但不,我正在使用單獨的WLNotificationSession實例,每個實例都有自己的套接字和變量。此外,根本沒有靜態或全局變量。 (我在問題中添加了一些示例代碼) – Rits 2010-09-22 13:19:05
你使用什麼框架/類來連接?你發什麼?只有登錄名和密碼? – David 2010-09-22 13:33:31