down vote favorite
using vb.net i'm trying to upload a youtube video using the API v3, what we need is : -Uploading a youtube using the provided json file from Google console. -Running on asp.net IIS local webserver ex (localhost/ApplicationName/..) and Not (localhost:port/..)
the problem is IIS, whenever uploading from a specific port everything is perfect. but my application will be accessed from different devices that's why i needed to have my application running on IIS webserver directly.
what i'm having is a infinite loop in GoogleWebAuthorizationBroker.AuthorizeAsync that never ends. i'm not getting any error, the API never return a response
below is my code, please advice:
<pre><pre lang="xml"><%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication4.WebForm1" Async="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form2" runat="server">
<div>
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Upload
Imports Google.Apis.Util.Store
Imports Google.Apis.YouTube.v3
Imports Google.Apis.YouTube.v3.Data
Imports System
Imports System.IO
Imports System.Reflection
Imports System.Threading
Imports System.Threading.Tasks
Public Class WebForm1
Inherits System.Web.UI.Page
Dim lngFileLength As Long = 0
Dim dblProgressPercent As Double = 0.0
Private Async Function Run() As Task
Dim credential As UserCredential
Dim myClientSecretLocation As String = HttpContext.Current.Server.MapPath("client_secrets.json")
Using stream = New FileStream(myClientSecretLocation, FileMode.Open, FileAccess.Read)
credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, _
{YouTubeService.Scope.Youtube, YouTubeService.Scope.Youtubepartner, YouTubeService.Scope.YoutubeUpload, YouTubeService.Scope.YoutubepartnerChannelAudit, YouTubeService.Scope.YoutubeReadonly}, _
"user", CancellationToken.None, Nothing) 'myStorageFolderLocation
End Using
Dim youtubeService__1 = New YouTubeService(New BaseClientService.Initializer() With { _
.HttpClientInitializer = credential, _
.ApplicationName = Assembly.GetExecutingAssembly().GetName().Name _
})
Response.Write("Passed<br />")
Dim video = New Video()
video.Snippet = New VideoSnippet()
video.Snippet.Title = "Default Video Title"
video.Snippet.Description = "Default Video Description"
video.Snippet.Tags = New String() {"tag1", "tag2"}
video.Snippet.CategoryId = "22"
' See https://developers.google.com/youtube/v3/docs/videoCategories/list
video.Status = New VideoStatus()
video.Status.PrivacyStatus = "unlisted" ' or "private" or "public"
Dim filePath = "c:\Small Video.mp4"
lngFileLength = New FileInfo(filePath).Length
dblProgressPercent = 0.0
Using fileStream = New FileStream(filePath, FileMode.Open)
Dim videosInsertRequest = youtubeService__1.Videos.Insert(video, "snippet,status", fileStream, "video/*")
AddHandler videosInsertRequest.ProgressChanged, AddressOf videosInsertRequest_ProgressChanged
AddHandler videosInsertRequest.ResponseReceived, AddressOf videosInsertRequest_ResponseReceived
Await videosInsertRequest.UploadAsync()
End Using
End Function
Private Sub videosInsertRequest_ProgressChanged(objUploadStatus As Global.Google.Apis.Upload.IUploadProgress)
Select Case objUploadStatus.Status
Case UploadStatus.Completed
Console.WriteLine("Status: Completed")
Case UploadStatus.Starting
Console.WriteLine("Status: Starting")
Case UploadStatus.NotStarted
Console.WriteLine("Status: Not Started")
Case UploadStatus.Uploading
Dim dblPercent As Double = 0
If lngFileLength > 0 Then
dblPercent = (100 * objUploadStatus.BytesSent) / lngFileLength
Else
dblPercent = 0
End If
Dim p As Integer = CInt(Int(dblPercent))
If p > CInt(Int(dblProgressPercent)) Then
Dim strMessage As String = String.Concat("Status: Uploading ", Format(p, "###"), _
"% (", Format(objUploadStatus.BytesSent, "###,###,###,###,###,###"), ")")
Console.WriteLine(strMessage)
dblProgressPercent = dblPercent
End If
Console.WriteLine(objUploadStatus.BytesSent & " bytes sent.")
Exit Select
Case UploadStatus.Failed
Console.WriteLine("An error prevented the upload from completing." & vbLf & objUploadStatus.Exception.ToString)
Exit Select
End Select
End Sub
Private Sub videosInsertRequest_ResponseReceived(video As Video)
Dim str As String = ("Video id " & video.Id & " was successfully uploaded.")
Response.Write(str)
End Sub
Protected Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Try
Await Run()
TextBox1.Text = "done"
'Catch ex As AggregateException
' Dim er
'For Each er In ex.InnerExceptions
' Response.Write("Error: " & Convert.ToString(er.Message) & " <br />")
'Next
'End Try
End Sub
End Class
Web.config:
="1.0"="utf-8"
<configuration>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.28.0" newVersion="4.2.28.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Threading.Tasks.Extensions.Desktop" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.168.0" newVersion="1.0.168.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer></configuration>
<br /> <asp:Button ID="Button2" runat="server" Text="upload" />
</div>
<asp:TextBox ID="TextBox2" runat="server" Height="151px" Width="675px"></asp:TextBox>
</form>
</body>
</html>