私は.NETフレームワークの使い方を学んでいます。私はASP .NETコアで作業しています。私は最近まで私の晴れのウェブホスティングクォータを持っていたり、ヒットしたりしていません。ごく少数のリクエストでクォータを打ち続けています。これは、dotnetbrowserライブラリをインストールして以来、これまでに始まっています。私のプロジェクトのための最良のライブラリです。なぜなら、データを簡単に入手できるからです。しかし、誰かが同じデータをWebブラウザやドットネットブラウザのようなブラウザコントロールを使わずに取得する方法を教えてもらえるかどうかは分かります。私が必要とするデータは、必要な値が提供される前に複数のサーバーとクライアントの通信を経由します。だから私の質問はどのようにブラウザコントロールを使用せずに同じことを達成することができますか?私はazureで実行中のアプリケーションでメモリ使用量を減らすことができます
最後に、スレッドとタスクに慣れていないので、コードがバグかもしれません。あまりにも多くのメモリを使用している可能性があります。以下は私のコードです
using DotNetBrowser;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web;
using System.Web.Http;
namespace AjaxRequest.Controllers
{
public class ValuesController : ApiController
{
private static ManualResetEvent waitEvent;
private static List<string> ajaxUrls = new List<string>();
static string str = "";
public static Browser browser;
public ValuesController()
{
waitEvent = new ManualResetEvent(false);
browser = BrowserFactory.Create();
browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();
}
// GET api/values
public string Get(int id, string title)
{
string Title = title.Replace(" ", "-");
browser.LoadURL(string.Format("https://ba.com/foo/{0}-{1}/something.html", Title, id));
waitEvent.WaitOne();
browser.Dispose();
string Json = Regex.Replace(str, @"\\","");
return Json.Replace("\\\"", "\"");
}
public class AjaxResourceHandler : ResourceHandler
{
//HomeController hc;
public bool CanLoadResource(ResourceParams parameters)
{
if (parameters.ResourceType == ResourceType.XHR && parameters.URL.Contains("https://something.com/ajax/blahblah"))
{
ajaxUrls.Add(parameters.URL);
}
return true;
}
}
public class AjaxNetworkDelegate : DefaultNetworkDelegate
{
//HomeController hc;
public override void OnDataReceived(DataReceivedParams parameters)
{
if (ajaxUrls.Contains(parameters.Url))
{
PrintResponseData(parameters.Data);
}
}
public void PrintResponseData(byte[] data)
{
str = Encoding.UTF8.GetString(data);
ajaxUrls.Clear();
browser.Stop();
browser.dispose();
waitEvent.Set();
}
public void error(string info)
{
str = info;
waitEvent.Set();
}
}
}
}
私は間違っている可能性がありますか?その場合、メモリやデータを節約するためにどのように改善することができますか?
ウェブアプリケーションで 'DotNetBrowser'を使って何をしようとしているのか説明できますか? –
アプリケーションはWebサイトと通信し、値がWebサイトに送られると、一連のAjaxリクエストからデータが取得され、クロムラッパーがJavaScriptを介してデータを実行し、別のAjaxリクエストを実行します取得されます。私はhttpclientがこれを行うことができます知っていることはありません。私の場合、XHRリクエストを聞くと、必要なデータを取得する前に4回のXHR要求が必要です。 – Cody
この声明では、あなたの目標が明確に説明されていません。**必要なデータが提供される前に複数のサーバーとクライアントの通信を行う必要があります** **これに基づいた代替ソリューションはサポートできません... – Svek