2013-01-24 37 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> 

回答