我们创建了用于查询Oracle数据库的WebAPI。查询返回非常大的结果。我们无法进行分页,因为客户端应用程序需要在一次调用中获得整个结果。当存在大量数据时会出现问题。正如在其他论坛中所建议的那样,我尝试在link
中建议在web.config中添加以下标记 <requestLimits maxAllowedContentLength="2147483647" />
(这是放在
里面<system.webServer><security><requestFiltering>
和
<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
放在
内 <system.web>
但是在添加之后,尝试调用API它会永远加载(等待将近1小时),然后再次将它从System.OutofMemoryException中抛出。任何人都可以帮我这个,因为这是我的第一个Web API。我们无法为此创建存储过程,因为我们只有读取访问权限的数据库
public HttpResponseMessage Getdetails([FromUri] string[] id)
{
string connStr = ConfigurationManager.ConnectionStrings["ProDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
var inconditions = id.Distinct().ToArray();
var srtcon = string.Join(",", inconditions);
DataSet userDataset = new DataSet();
var strQuery = @"SELECT * from STCD_PRIO_CATEGORY where STPR_STUDY.STD_REF IN(" + srtcon + ")";
using (OracleCommand selectCommand = new OracleCommand(strQuery, dbconn))
{
using (OracleDataAdapter adapter = new OracleDataAdapter(selectCommand))
{
DataTable selectResults = new DataTable();
adapter.Fill(selectResults);
var returnObject = new { data = selectResults };
var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
ContentDispositionHeaderValue contentDisposition = null;
if (ContentDispositionHeaderValue.TryParse("inline; filename=ProvantisStudyData.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
我甚至尝试添加断点,只是添加了适配器。填充(selectResults)需要更长的时间。如果行计数大约为45,000,则返回结果而没有任何问题。我试过的ID假设返回600,000行,我们得到内存异常。任何人都可以帮助我。