0

APIを介してYouTubeにアップロードしようとしていますが、ローカルで実行している間は正常に動作します。Azure アプリにあると、(403) Forbidden が表示されます

これが私のコードです:

YouTubeRequestSettings settings = new YouTubeRequestSettings("XXXXX", token, userName, Password);
YouTubeRequest request = new YouTubeRequest(settings);
Video newVideo = new Video();

newVideo.Title = "Test";
newVideo.Tags.Add(new MediaCategory("Autos", YouTubeNameTable.CategorySchema));
newVideo.Keywords = "car";

newVideo.Description = "My first try";
newVideo.YouTubeEntry.Private = false;
newVideo.Tags.Add(new MediaCategory("devTag",
  YouTubeNameTable.DeveloperTagSchema));
newVideo.YouTubeEntry.MediaSource = new MediaFileSource(**SaveFileToLocal**(fileUpload), fileUpload.ContentType);
Video createdVideo = request.Upload(newVideo);

private string **SaveFileToLocal**(HttpPostedFileBase fileUpload)
{
    string uploadedFilePath;
    if (Local)
    {
        var uploadPath = Server.MapPath("~/AlbumsUploads//" + "RD");
        uploadedFilePath = Path.Combine(uploadPath, fileUpload.FileName);
    }
    else
    {
        LocalResource localResource = RoleEnvironment.GetLocalResource("LocalWebRoleStorage");
        string[] paths = { localResource.RootPath, DateTime.Now.Ticks.ToString() + "_temp" + fileUpload.FileName.Substring(fileUpload.FileName.LastIndexOf('.')) };
        uploadedFilePath = Path.Combine(paths);
    }
    using (var fs = new FileStream(uploadedFilePath, FileMode.Create))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    return uploadedFilePath;
}   

そして、ここに私の例外があります。

Google.GData.Client.GDataRequestException: Execution of request failed: https://uploads.gdata.youtube.com/feeds/api/users/default/uploads ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at Google.GData.Client.GDataRequest.Execute()
--- End of inner exception stack trace ---
at Google.GData.Client.GDataRequest.Execute()
at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
at Google.GData.Client.MediaService.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
at Google.YouTube.YouTubeRequest.Upload(String userName, Video v)
at MvcWedApp.Controllers.AlbumManagementController.UploadToYouTube(HttpPostedFileBase fileUpload, Int32 albumId)
at MvcWedApp.Controllers.AlbumManagementController.Upload(Nullable`1 chunk, String name) 

誰でも助けてくれますか?

4

2 に答える 2

1

私はあなたの問題と同様の問題に遭遇しました:

この状況について Azure Technical Evangelist と話しましたが、彼は Youtube API のポート (80 と 443) が閉じたときにこの問題が発生すると考えています。サーバー ファイアウォールのプロパティに関するものかもしれません。そのため、このポートを開くことについて多くの方法(リモートからサーバーへの変更、ファイアウォールのプロパティの変更など)を変更しようとしましたが、機能しません。

最後に問題を解決し、ポート アクセスに関する問題ではないことを理解できました。** Google アカウントへのアクセスを承認し、この URL でクラウド サービスを許可しました**: 了解しました。 アプリケーションごとに新しい特定のパスワードを生成する必要があります。 . また、次の URL で DevKey を生成する必要があります。

多分それは問題に関連している可能性があります...

于 2012-11-22T17:22:05.660 に答える
1

問題は、YourTube サーバーが認証要求を 403 で拒否していることです。これは、ASP.NET Web ロールからの認証要求が何らかの理由で失敗したことを意味します。また、まだアップロードを開始していないことも説明しているため、ネットワーク関連のアクセスの問題である可能性があります.

このような問題のトラブルシューティングを行うために、次のことを試すことができます。

  1. Azure VM に RDP で接続し、 Fiddlerをインストールして、ネットワーク トラフィックを収集します。これをデスクトップ トラフィックと比較して、何が問題なのかを確認してください。
  2. Azure VM に Network Monitor をインストールして、ネットワーク トラフィックを比較して、認証が失敗したことが原因であるか、ネットワーク IP/ポートなどに問題があるかを理解することもできます。

また、ローカルでテストする場合、ASP.NET アプリケーションをコンピューター エミュレーターで実行すると機能しますか?

以下のドキュメントに基づいて、Google 認証シーケンスに行き詰まっているため、最初にトラブルシューティングを行います。私の経験に基づくと、フィドラーはあなたの親友であり、根本的な原因を理解して解決策を見つけることができます: https://developers.google.com/youtube/2.0/developers_guide_protocol#Process_Flows_for_Uploading_Videos

注: これは決して解決策ではありませんが、この問題のトラブルシューティング方法を説明するためにここに書いています。

于 2012-05-23T17:49:42.040 に答える