2013-01-24 39 views
1

我想發送大的請求到服務器並獲取大數據。所以我使用批量請求到數據服務。此請求的URI如下所示:「hxxp://company/Test.svc/$batch」。我使用.NET 4.0批量查詢到webservice返回「Uri字符串太長」

我發送有效的POST請求:

DataServiceRequest[] Request = new DataServiceRequest[]{new DataServiceRequest<TTable>((query).RequestUri)}; 
try 
{ 
    DataServiceResponse dsr = WebService.ExecuteBatch(Request); 
    foreach (QueryOperationResponse qr in dsr) 
    { 
     if (qr.Query.ElementType == typeof(TTable)) 
     { 
      foreach (TTable item in qr) { list.Add(item); } 
     } 
    } 
} 

而且收到一條錯誤消息:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code></code> 
    <message xml:lang="ru-RU">An error occurred while processing this request.</message> 
    <innererror> 
    <message>Invalid URI: The Uri string is too long.</message> 
    <type>System.UriFormatException</type> 
    <stacktrace> at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)&#xD; 
    at System.Uri..ctor(String uriString, UriKind uriKind)&#xD; 
    at System.Data.Services.RequestUriProcessor.GetAbsoluteUriFromReference(String reference, Uri absoluteServiceUri)&#xD; 
    at System.Data.Services.BatchServiceHost..ctor(Uri absoluteServiceUri, BatchStream batchStream, String contentId, String boundary, StreamWriter writer)&#xD; 
    at System.Data.Services.DataService`1.BatchDataService.CreateOperationContextFromBatchStream(Uri absoluteServiceUri, BatchStream batchStream, HashSet`1 contentIds, String boundary, StreamWriter writer)&#xD; 
    at System.Data.Services.DataService`1.BatchDataService.HandleBatchContent(Stream responseStream)</stacktrace> 
    </innererror> 
</error> 

這似乎是服務器端異常,occures當它嘗試解析大烏里。如何避免這種限制?

修改(28/01/2013 16:00)

IIS配置:

<?xml version="1.0"?> 
<configuration> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="500000000" maxQueryString="209715000" maxUrl="2000000"></requestLimits> 
     </requestFiltering> 
    </security> 
    <directoryBrowse enabled="true"/> 
    <httpErrors errorMode="Detailed"/> 
    <caching enabled="false" enableKernelCache="false"/> 
    </system.webServer> 
    <system.web> 
    <httpRuntime executionTimeout="4800" 
     maxQueryStringLength="2097150" 
     maxUrlLength="2097150" 
     relaxedUrlToFileSystemMapping="true" 
     maxRequestLength="500000000" 
     requestValidationMode="4.0"/> 
    <customErrors mode="Off"/> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <add assembly="System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     </assemblies> 
    </compilation> 
    </system.web> 
</configuration> 

回答