2015-09-23 2 views
-1

Я сделал веб-службы aC#, а в другой руке у меня есть winform C#, которые потребляют эти веб-службы, проблема в том, что веб-службы возвращают DATASET с большим количеством 5000 строк и получают ошибкуКлиент WinForm, использующий WebServices в C#

Ошибка: превышена максимальная квота на размер сообщений для входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize в соответствующем связывающем элементе.

Вот код WebService:

[WebMethod] 
    public DataSet cuentaAtrasadas() 
    { 
     SqlConnection myConnection = new SqlConnection("Data Source=192.168.87.15;" + "Initial Catalog=Indar;" + "User id=sa;" + "Password=;"); 

      DataSet ds = new DataSet(); 
      string query = "Select Zona = Rama, CxcInfo.Cliente, Cte.Nombre, Movimiento = CxcInfo.Mov,cxcinfo.estatus, NumDoc = CxcInfo.MovID, CxcInfo.Referencia, Oc.MovId, Comentarios = SubString(Cxc.Comentarios,1,50), " + 
      "FechaEmision = Convert(Char(10), CxcInfo.FechaEmision, 103), Vencimiento = Convert(Char(10), CxcInfo.Vencimiento, 103), Dias = CxcInfo.DiasMoratorios, Importe = (Cxc.Importe + Cxc.Impuestos), Saldo = CxcInfo.Saldo, " + 
      " FormaPago = Cte.Descripcion7, cxc.comentariosCyc, cxc.comentariosGte, cxc.fechacomp,cxc.responsablecxc FROM CxcInfo Left Outer Join Cte On CxcInfo.Cliente=Cte.Cliente Left Outer Join (Select Mov, MovId, EstatusOC, Docto, EstadoDocto " + 
      " From (Select E.Mov, E.MovId, EstatusOC = E.Estatus, E.FechaRegistro,   Docto = Em.Mov+' '+Em.MovId, EstadoDocto = Ed.Estado,  Rank() Over (Partition By Em.MovId Order By E.FechaRegistro Desc) As 'UltEmbF'  " + 
      " From Embarque E   Left Outer Join EmbarqueD Ed ON E.ID = Ed.ID  Left Outer Join EmbarqueMov Em ON Ed.EmbarqueMov = Em.Id  Where E.Empresa = 'FIN'   And Em.Modulo = 'CXC'  And Em.Mov = 'Factura Indar' " + 
      " And E.Mov = 'Orden Cobro'  ) Ue Where UltEmbF = 1 ) Oc On Oc.Docto = CxcInfo.Mov+' '+CxcInfo.MovId , Cxc WHERE Cxc.Cliente = Cte.cliente And Cxc.Id = CxcInfo.Id And CXCInfo.Empresa = 'FIN' " + 
      " And (CxcInfo.Cliente Not In ('C000006') And CxcInfo.Cliente Not Like '[D,E,S,FSF,FIN]%') And (CxcInfo.Saldo <> 0 And Cxc.Saldo <> 0) and rama='Z130' Order By CxcInfo.Mov"; 
     SqlDataAdapter da = new SqlDataAdapter(query, myConnection); 
     da.SelectCommand.CommandTimeout = 0; 
     da.Fill(ds, "CTE"); 
     return ds; 
    } 

и код клиента:

ServiceReference1.Service1SoapClient soap = new ServiceReference1.Service1SoapClient(); 

     DataSet ds = soap.cuentaAtrasadas(); 
     gridControl1.DataSource = ds.Tables[0].DefaultView; 

И я получаю ошибку в этой строке: DataSet DS = мыло. cuentaAtrasadas(); , но где увеличить свойство MaxReceivedMessageSize?

+0

Возможного дубликата HTTP: // stackoverflow.com/questions/14999779/maxreceivedmessagesize-and-maxbuffersize-in-app-config –

+0

1 - Удалите все это и используйте Entity Framework. 2 - Удалите все это и создайте правильный API REST с помощью ASP.Net Web API, который позволяет вам запрашивать данные в логической форме. Привлечение тысяч записей, которые вы не собираетесь использовать, не имеет никакого смысла. 3 - Пока вы на нем, удалите все это и используйте WPF. –

ответ

1

Я предлагаю вам установить значение в файле конфигурации на службе в binding section:

<bindings> 
     <basicHttpBinding> 
     <binding name="Binding1" 
       maxReceivedMessageSize = "Your value"> 
      <security mode="None" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

Этот пример основан на basicHttpBinding, вы можете иметь еще привязки

Смежные вопросы