Код AdWords работает на локальном хосте, но не на реальном сервере - PullRequest
0 голосов
/ 06 июня 2018

Ситуация следующая: мой код работает на локальном хосте, но если я пытаюсь запустить его на работающем сервере, я получаю следующее:

System.ArgumentNullException: значение не может быть нулевым.\ r \ nИмя параметра: похоже, ваше приложение не настроено для правильного использования OAuth2.Обязательный параметр OAuth2 RefreshToken отсутствует.Вы можете запустить Common \\ Utils \\ OAuth2TokenGenerator.cs для создания конфигурации OAuth2 по умолчанию. \ R \ n в Google.Api.Ads.Common.Lib.OAuth2ProviderBase.ValidateOAuth2Parameter (String propertyName, String propertyValue) \ r \ n в Google.Api.Ads.Common.Lib.OAuth2ProviderForApplications.RefreshAccessToken () \ r \ n в Google.Api.Ads.Common.Lib.OAuth2ProviderForApplications.RefreshAccessTokenIfExpiring () \ r \ n в Google.Amon.A2.ApA.GetAuthHeader () \ r \ n в Google.Api.Ads.Common.Lib.OAuth2ProviderForApplications.GetAuthHeader () \ r \ n в Google.Api.Ads.Common.Lib.OAuth2ClientMessageInspector.BeforeSendRehanest, Message \entClient ()r \ n в System.ServiceModel.Dispatcher.ImmutableClientRuntime.BeforeSendRequest (ProxyRpc & rpc) \ r \ n в System.ServiceModel.Channels.ServiceChannel.PrepareCall (операция ProxyOperationRuntime, булевский системный оператор \ rc.Channels.ServiceChannel.Call (строковое действие, логический односторонний режим, операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) \ r \ n в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (операция MethodCall methodCall, ProxyOperationRuntime) \ r \ n в System.ServiceModel.Channels.ServiceChannelProxyInvo (MethodInfo targetMethod, Object [] args) \ r \ n --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n вSystem.Reflection.DispatchProxyGenerator.Invoke (Object [] args) \ r \ n в генерируемом Proxy_1.get (TargetingIdeaSelector) \ r \ n в Google.Api.Ads.AdWords.v201802.TargetingIdeaService.get (селектор TargetingIdeaSelector) \ r \ nв AdWordsCall.Controllers.AdWordsController.Get (String kword) в D: \ home \ site \ repository \ AdWordsCall \ Controllers \ AdWordsController.cs: строка 53

Проблема в том, что я использую GitHub дляразвертывания в Azure, поэтому он должен просто захватить весь код, который мне нужен.

Моя дикая догадка состоит в том, что есть место, где мне нужно включить URL-адрес.Это допустимо, но я переделал генерацию всего ключа 3 раза и не смог его найти.Любая идея, что я пропускаю?

Мой код здесь:

[HttpGet]
public IEnumerable<string> Get(string kword)
{
    var user = new AdWordsUser();
    using (TargetingIdeaService targetingIdeaService = (TargetingIdeaService)user.GetService(AdWordsService.v201802.TargetingIdeaService))
    {
        // Create selector.
        TargetingIdeaSelector selector = new TargetingIdeaSelector();
        selector.requestType = RequestType.IDEAS;
        selector.ideaType = IdeaType.KEYWORD;
        selector.requestedAttributeTypes = new AttributeType[] {
            AttributeType.KEYWORD_TEXT,
            AttributeType.SEARCH_VOLUME,
            AttributeType.AVERAGE_CPC,
            AttributeType.COMPETITION,
            AttributeType.TARGETED_MONTHLY_SEARCHES,
            AttributeType.IDEA_TYPE,
        };

        // Set selector paging (required for targeting idea service).
        Paging paging = Paging.Default;

        selector.paging = paging;

        // Create related to query search parameter.
        var relatedToQuerySearchParameter = new RelatedToQuerySearchParameter { queries = new String[] { kword } };

        var searchParameters = new SearchParameter[] { relatedToQuerySearchParameter };

        //searchParameters.Add(relatedToQuerySearchParameter);

        var page = new TargetingIdeaPage();

        selector.searchParameters = searchParameters;

        try
        {
            page = targetingIdeaService.get(selector);
        }
        catch (Exception e)
        {
            return new string[] { e.ToString() };
        }
        // Display related keywords.
        if (page.entries != null && page.entries.Length > 0)
        {
            foreach (TargetingIdea targetingIdea in page.entries)
            {
                Dictionary<AttributeType, Google.Api.Ads.AdWords.v201802.Attribute> ideas =
                    targetingIdea.data.ToDict();

                var keyword = (ideas[AttributeType.KEYWORD_TEXT] as StringAttribute).value;
                var averageMonthlySearches =
                    (ideas[AttributeType.SEARCH_VOLUME] as LongAttribute).value;
                var averageCpc = (ideas[AttributeType.AVERAGE_CPC] as MoneyAttribute).value;
                var competition = (ideas[AttributeType.COMPETITION] as DoubleAttribute).value;
                var monthlySearchVolume = (ideas[AttributeType.TARGETED_MONTHLY_SEARCHES] as MonthlySearchVolumeAttribute).value;
                var ideaType = (ideas[AttributeType.IDEA_TYPE] as IdeaTypeAttribute).value;

                var res1 = "{" +
                    "keyword: " + keyword +
                    ", volume: " + averageMonthlySearches +
                    ", averageCPC: " + averageCpc?.microAmount +
                    ", competition: " + competition +
                    //", monthlySearches: " + monthlySearchVolume +
                    //", ideaType: " + ideaType +
                    "}";
                return new string[] { res1 };
            }
        }
        return new string[] { "test" };
    }
}

Ответ на localhost такой:

["{keyword: red herring f3ae3846, volume: 4276400, averageCPC: 5647516, competition: 0.305029810905172}"]

Это фиктивный ответ, потому чтоон находится под учетной записью разработчика.

...