Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 为什么当我试图归档Bing搜索API的结果时,这个控制器会将插入加倍?_Asp.net Mvc 4_Bing Api_Asynccontroller - Fatal编程技术网

Asp.net mvc 4 为什么当我试图归档Bing搜索API的结果时,这个控制器会将插入加倍?

Asp.net mvc 4 为什么当我试图归档Bing搜索API的结果时,这个控制器会将插入加倍?,asp.net-mvc-4,bing-api,asynccontroller,Asp.net Mvc 4,Bing Api,Asynccontroller,我正试图通过以下方式存档我的搜索结果 在异步控制器中使用Bing API 使用实体框架将它们插入数据库 使用Bing API并使用实体框架将它们插入数据库。无论出于什么原因,它都会返回50个结果,但随后会将100个结果输入数据库 我的控制器代码: public class DHWebServicesController : AsyncController { // // GET: /WebService/ private DHContex

我正试图通过以下方式存档我的搜索结果

  • 在异步控制器中使用Bing API
  • 使用实体框架将它们插入数据库
  • 使用Bing API并使用实体框架将它们插入数据库。无论出于什么原因,它都会返回50个结果,但随后会将100个结果输入数据库

    我的控制器代码:

    public class DHWebServicesController : AsyncController
        {
            //
            // GET: /WebService/
    
            private DHContext context = new DHContext();
    
    
            [HttpPost]
            public void RunReportSetAsync(int id)
            {
                int iTotalCount = 1;
                AsyncManager.OutstandingOperations.Increment(iTotalCount);
                if (!context.DHSearchResults.Any(xx => xx.CityMarketComboRunID == id))
                {
    
                    string strBingSearchUri = @ConfigurationManager.AppSettings["BingSearchURI"];
                    string strBingAccountKey = @ConfigurationManager.AppSettings["BingAccountKey"];
                    string strBingUserAccountKey = @ConfigurationManager.AppSettings["BingUserAccountKey"];
                    CityMarketComboRun cityMarketComboRun = context.CityMarketComboRuns.Include(xx => xx.CityMarketCombo).Include(xx => xx.CityMarketCombo.City).First(xx => xx.CityMarketComboRunID == id);
    
                    var bingContainer = new Bing.BingSearchContainer(new Uri(strBingSearchUri));
                    bingContainer.Credentials = new NetworkCredential(strBingUserAccountKey, strBingAccountKey);
                    // now we can build the query
    
                    Keyword keyword = context.Keywords.First();
                    var bingWebQuery = bingContainer.Web(keyword.Name, "en-US", "Moderate", cityMarketComboRun.CityMarketCombo.City.Latitude, cityMarketComboRun.CityMarketCombo.City.Longitude, null, null, null);
                    var bingWebResults = bingWebQuery.Execute();
    
                    context.Configuration.AutoDetectChangesEnabled = false;
    
                    int i = 1;
                    DHSearchResult dhSearchResult = new DHSearchResult();
                    List<DHSearchResult> lst = new  List<DHSearchResult>();
                    var webResults = bingWebResults.ToList();
                    foreach (var  result in webResults)
                    {
                        dhSearchResult = new DHSearchResult();
                        dhSearchResult.BingID = result.ID;
                        dhSearchResult.CityMarketComboRunID = id;
                        dhSearchResult.Description = result.Description;
                        dhSearchResult.DisplayUrl = result.DisplayUrl;
                        dhSearchResult.KeywordID = keyword.KeywordID;
                        dhSearchResult.Created = DateTime.Now;
                        dhSearchResult.Modified = DateTime.Now;
                        dhSearchResult.Title = result.Title;
                        dhSearchResult.Url = result.Url;
                        dhSearchResult.Ordinal = i;
                        lst.Add(dhSearchResult);
                        i++;
                    }
    
                    foreach (DHSearchResult c in lst)
                    {
                        context.DHSearchResults.Add(c);
                        context.SaveChanges();
    
                    }
                    AsyncManager.Parameters["message"] = "The total number of results was "+lst.Count+".  And there are " + context.DHSearchResults.Count().ToString();
                }
                else
                {
                    AsyncManager.Parameters["message"] = "You have already run this report";
                }
                AsyncManager.OutstandingOperations.Decrement(iTotalCount);
            }
            public string RunReportSetCompleted(string message)
            {
                string str = message;
                return str;
            }
    
        }
    
    公共类DHWebServicesController:AsyncController
    {
    //
    //获取:/WebService/
    private DHContext context=new DHContext();
    [HttpPost]
    public void RunReportSetAsync(int-id)
    {
    int iTotalCount=1;
    AsyncManager.OutstandingOperations.Increment(iTotalCount);
    如果(!context.DHSearchResults.Any(xx=>xx.CityMarketComboRunID==id))
    {
    字符串strBingSearchUri=@ConfigurationManager.AppSettings[“BingSearchURI”];
    字符串strBingAccountKey=@ConfigurationManager.AppSettings[“BingAccountKey”];
    字符串strBingUserAccountKey=@ConfigurationManager.AppSettings[“BingUserAccountKey”];
    CityMarketComboRun CityMarketComboRun=context.CityMarketComboRuns.Include(xx=>xx.CityMarketCombo)。Include(xx=>xx.CityMarketCombo.City)。首先(xx=>xx.CityMarketComboRunID==id);
    var bingContainer=new Bing.BingSearchContainer(newuri(strBingSearchUri));
    bingContainer.Credentials=新的网络凭据(strBingUserAccountKey、strBingAccountKey);
    //现在我们可以构建查询了
    关键字=context.Keywords.First();
    var bingWebQuery=bingContainer.Web(关键字.Name,“en-US”,“mediate”,cityMarketComboRun.CityMarketCombo.City.Latitude,cityMarketComboRun.CityMarketCombo.City.Longitude,null,null);
    var bingWebResults=bingWebQuery.Execute();
    context.Configuration.AutoDetectChangesEnabled=false;
    int i=1;
    DHSearchResult DHSearchResult=新的DHSearchResult();
    List lst=新列表();
    var webResults=bingWebResults.ToList();
    foreach(webResults中的var结果)
    {
    dhSearchResult=新的dhSearchResult();
    dhSearchResult.BingID=result.ID;
    dhSearchResult.CityMarketComboRunID=id;
    dhSearchResult.Description=结果.Description;
    dhSearchResult.DisplayUrl=result.DisplayUrl;
    dhSearchResult.KeywordID=关键字.KeywordID;
    dhSearchResult.Created=DateTime.Now;
    dhSearchResult.Modified=DateTime.Now;
    dhSearchResult.Title=结果.Title;
    dhSearchResult.Url=result.Url;
    dhSearchResult.Ordinal=i;
    lst.Add(dhSearchResult);
    i++;
    }
    foreach(lst中的DHC搜索结果)
    {
    DHSearchResults.Add(c);
    SaveChanges();
    }
    AsyncManager.Parameters[“message”]=“结果总数为”+lst.Count+”,其中有“+context.DHSearchResults.Count().ToString()”;
    }
    其他的
    {
    AsyncManager.Parameters[“message”]=“您已经运行此报告”;
    }
    AsyncManager.OutstandingOperations.Decreation(iTotalCount);
    }
    公共字符串RunReportSetCompleted(字符串消息)
    {
    字符串str=消息;
    返回str;
    }
    }
    
    下面是我在asp.NETMVC4页面中对它的称呼

    @Ajax.ActionLink("Run Report", "GatherKeywordsFromBing", "DHWebServices", 
                    new { id=item.CityMarketComboRunID}, 
                    new AjaxOptions { OnSuccess = "ShowNotifier();", UpdateTargetId = "TopNotifierMessage", HttpMethod = "POST", InsertionMode = InsertionMode.Replace, LoadingElementId = strCityMarketComboProgressID, LoadingElementDuration = 1000 }, 
                    new { @class = "ViewLink" }) 
                <span class="ProgressIndicator" id="@strCityMarketComboProgressID"><img src="@Url.Content("~/Content/img/SmallBall.gif")" alt="loading" /></span>
    
    @Ajax.ActionLink(“运行报告”、“GatherKeywordsFroming”、“DHWebServices”,
    新建{id=item.CityMarketComboRunID},
    新的AjaxOptions{OnSuccess=“ShowNotifier();”,UpdateTargetId=“TopNotifierMessage”,HttpMethod=“POST”,InsertionMode=InsertionMode.Replace,LoadingElementId=strCityMarketComboProgressID,LoadingElementDuration=1000},
    新建{@class=“ViewLink”})
    
    无论出于何种原因,所有人只需保存一次:

    foreach (DHSearchResult c in lst)
    {
        context.DHSearchResults.Add(c);
    }
    context.SaveChanges();
    

    此外,您的代码中没有异步,所以使用异步控制器没有意义。它不仅不会改善任何东西,而且可能会使事情变得更糟。

    当代码中没有异步内容时,为什么要使用异步控制器?这是完全连续的。在这种情况下,异步控制器没有意义。这只会让事情变得更糟。我计划在以后添加一些异步功能(即,它需要一些时间才能运行),并最终添加一个状态指示器。我尝试了你上面建议的方法,得到了同样的结果。这是一件令人担忧的事情。