Search code examples
c#.netgoogle-cloud-scheduler

How to use Google.Apis.CloudScheduler.v1beta1 client library to create jobs in .NET?


I m trying to create jobs in google cloud schedule from my Web Api.

I am able to create job using client library but I believe it is not getting posted to Google.

    CloudSchedulerService cloudScheduler = new CloudSchedulerService();
    IDictionary<string, string> header = new Dictionary<string, string>();
    header.Add("Content-Type", "application/json");
    header.Add("Authorization", "Bearer sk_test_XKokBfNWv6FIYuTMg5sLPjhJ");
    HttpTarget httpTarget = new HttpTarget()
    {
        Body = "Check",
        Headers = header,
        HttpMethod = "POST",
        Uri = "******"
    };
    Job job = new Job()
    {
        Description = "testing",
        HttpTarget = httpTarget,
        Name = "projects/******/locations/europe-west3/jobs/testjob4",
        Schedule = "5 * * * *",
        TimeZone = "Asia/Kuwait"
    };
    cloudScheduler.Projects.Locations.Jobs.Create(job, "projects/******/locations/europe-west3");

Solution

  • i solved it by using googleCredential with service account created from google console.

      public static string[] scope =
        {
            CloudSchedulerService.Scope.CloudPlatform
        };
    public static void CreateJob()
        {
     GoogleCredential googleCredential = GoogleCredential.FromFile("filepath").CreateScoped(scope);
    
                if (googleCredential != null)
                {
                    ICredential credential = googleCredential.UnderlyingCredential;
                    ServiceAccountCredential serviceAccountCredential = credential as ServiceAccountCredential;
    
                    CloudSchedulerService cloudScheduler = new CloudSchedulerService(new Google.Apis.Services.BaseClientService.Initializer()
                    {
                        HttpClientInitializer = googleCredential,
                        GZipEnabled = false
                    });
                    IDictionary<string, string> header = new Dictionary<string, string>();
                    header.Add("Content-Type", "application/json");
                    header.Add("Authorization", "Bearer "+jobDetails.httpTarget.Authorization);
                    HttpTarget httpTarget = new HttpTarget()
                    {
                        Body = Base64Encode("json string"),
                        Headers = header,
                        HttpMethod = "POST",
                        Uri = "*********"
                    };
                    Job job = new Job()
                    {
                        Description = "",
                        HttpTarget = httpTarget,
                        Name = "projects/" + serviceAccountCredential.ProjectId + "/locations/europe-west3/jobs/" + jobId,
                        Schedule = "5 * * * *", //cron formate
                        TimeZone = "Asia/Kuwait"
                    };
                    cloudScheduler.Projects.Locations.Jobs.Create(job, "projects/" + serviceAccountCredential.ProjectId + "/locations/europe-west3").Execute();
    

    } }