none
Erro quando retorno 3 datasets no webservice RRS feed

  • Pergunta

  • Bom dia, estou criando um webservice  e ainda so sei o basico.

    Tenho uma classe  com 2 datasets e retorno no metodo um objeto desta classe.
    No cliente ocorre tudo ok.. recebo os datasets e trabalho normalmente eles.

    O problema esta vindo quando preciso aumentar esses datasets, por ex: Adiciono
    mais um dataset nesta classe ficando assim 3 datasets. Quando chamo o metodo do
    webservice no cliente ele me da um erro no cliente de erro de xml.. Não consigo muita
    informação para identificar o erro..


    Sera que é pelo motivo de 2 datasets o arquivo xml fica maior e esta causando o erro?

    Alguem tem uma ideia?

    []´s
    Geraldo
    segunda-feira, 19 de maio de 2008 12:59

Respostas

  • Ow, uma pergunta obvia, esse erro está dando no cliente né? Nao no webservice certo?
     Se estivesse ocorrendo no webservice, ou seja, se a exceção estiver vindo de lá , talvez esse artigo poderia ajudar
    http://scootville.blogspot.com/2006/07/failed-to-enable-constraints-one-or.html#links

     Li em alguns lugares que quando vem DBNull tambem pode dar problema
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2687236&SiteID=1

      Voce usou tableadapters tambem?

    []´s


    segunda-feira, 19 de maio de 2008 17:47

Todas as Respostas

  • Será que nao é mais facil retornar uma classe (criada por voce) que possa transmitir os dados necessários para que no lado do cliente voce possa criar os datasets?
    segunda-feira, 19 de maio de 2008 13:33
  • Não sei qual melhor jeito de fazer.
    fazendo assim eu apenas tenho uma classe com 3 dataset...

    Para criar uma classe com um objeto do tipo das tabelas que
     contem no dataset seria eu fazer uma conversao para objetos como vc disse e depois
    teria q fazer outra no cliente... isso é um tipo de trabalho dobrado...

    posso esta errado na maneira de pensar... mas do lado do cliente eu vou trabalhar com dataset
    e no servidor ja tenho os dataset... entao pra que eu irei converter em objetos dos tipos?

    []´s
    segunda-feira, 19 de maio de 2008 14:00
  • Tá, entao vamos tentar fazer assim. Com dois datasets voce diz que conseguiu usa-los no cliente sem problemas ne?
     Olha, vamos tentar identificar qual é o erro que esta acontecendo.
     O erro começou a ocorrer quanfo voce adicionou o terceiro dataset? Se sim, tenta só transmitir só ele para o cliente, se der tudo certo, a gente já sabe que o problema nao foi ele.

     Será que são muitos dados? Para verificar essa possibilidade, tenta popular esses datasets com poucos registros. Se não der erro, vai tentando aumentar o número de registros e se uma hora der um erro, vamos ver quantos registros que é o ideal.

     []´s
    segunda-feira, 19 de maio de 2008 14:13
  • Sim.. ja tentei fazer assim.. datasets A B C

    Deu certo enviado

    Somente A
    Somente B
    Somente C
    Somente A,B
    Somente A,C
    Somente C,A
    Somente B,C

    erro é apenas se colocar 3 datasets

    existe pouco dados q estou enviando.. pois estou com um banco de teste.. tipo uns 8 registro em cada..

    tentei enviar sem polular os datasets e ainda da erro no arquivo xml... da erro em linha acima de 2000

    o error:
    InvalidOperationException


    []´s

    segunda-feira, 19 de maio de 2008 16:05
  • detalhe:

    estou tentando mandar é 3 datatables  e nao 3 dataset....
    rsss

    []´s
    segunda-feira, 19 de maio de 2008 16:31
  • Wink

      Voce falou que deu uma InvalidOperationException né?
      Será que daria para copiar toda a exceção pra gente dar uma olhada?
      []´s

    segunda-feira, 19 de maio de 2008 16:50

  • Code Snippet

    System.InvalidOperationException: There is an error in XML document (1, 2286). ---> System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
       at System.Data.DataTable.EnableConstraints()
       at System.Data.DataTable.set_EnforceConstraints(Boolean value)
       at System.Data.DataTable.RestoreConstraint(Boolean originalEnforceConstraint)
       at System.Data.DataTable.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
       at System.Data.DataTable.ReadXmlSerializable(XmlReader reader)
       at System.Data.DataTable.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
       at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable, Boolean wrappedAny)
       at System.Xml.Serialization.XmlSerializationReader.ReadSerializable(IXmlSerializable serializable)
       at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderService1.Read2_Dados(Boolean isNullable, Boolean checkType)
       at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderService1.Read3_atualizaClienteResponse()
       at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Deserialize(XmlSerializationReader reader)
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       --- End of inner exception stack trace ---
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
       at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
       at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage
       at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
       at AplicacaoCliente.ServiceDiario.Service1.atualizaCliente() in C:\projetos\PCC\AplicacaoCliente\Web References\ServiceDiario\Reference.cs:line 78
       at AplicacaoCliente.Form1.button1_Click(Object sender, EventArgs e) in C:\projetos\PCC\AplicacaoCliente\Form1.cs:line 23





    []´s


    segunda-feira, 19 de maio de 2008 17:17
  • Ow, uma pergunta obvia, esse erro está dando no cliente né? Nao no webservice certo?
     Se estivesse ocorrendo no webservice, ou seja, se a exceção estiver vindo de lá , talvez esse artigo poderia ajudar
    http://scootville.blogspot.com/2006/07/failed-to-enable-constraints-one-or.html#links

     Li em alguns lugares que quando vem DBNull tambem pode dar problema
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2687236&SiteID=1

      Voce usou tableadapters tambem?

    []´s


    segunda-feira, 19 de maio de 2008 17:47
  • Usei o table adapter apenas para popular os datatables...  vou postar meu Dados.cs

    Code Snippet

     public class Dados
        {
            public Dados()
            {

            }

            ds.Diario.AlunoDataTable dtAluno;

            public ds.Diario.AlunoDataTable DtAluno
            {
                get { return dtAluno; }
                set { dtAluno = value; }
            }

            public ds.Diario.AlunosDasTurmasDataTable dtAlunosDaTurma;

            public ds.Diario.AulaDataTable dtAula;

            public ds.Diario.CursoDataTable dtCurso;
       
            public ds.Diario.DisciplinaDataTable dtDisciplina;

            public ds.Diario.DisciplinaGradeDataTable dtDisciplinaGrade;
          
            public ds.Diario.FrequenciaDataTable dtFrequencia;

            public ds.Diario.GradeDataTable dtGrade;

            public ds.Diario.GradesMatricDataTable dtGradesMatric;

            public ds.Diario.PessoaDataTable dtPessoa;

            public ds.Diario.ProfessorDataTable dtProfessor;

            public ds.Diario.TurmaDataTable dtTurma;


            public void getDados(String professor)
            {
                try
                {
                   
                     dtAluno = new WebServiceDiario.ds.Diario.AlunoDataTable();
                     ds.DiarioTableAdapters.AlunoTableAdapter adapterAluno = new WebServiceDiario.ds.DiarioTableAdapters.AlunoTableAdapter();
                     this.dtAluno = adapterAluno.GetDataByProfessor("123");
                   
                     dtGradesMatric = new WebServiceDiario.ds.Diario.GradesMatricDataTable();
                     ds.DiarioTableAdapters.GradesMatricTableAdapter adapterGradesMatric = new WebServiceDiario.ds.DiarioTableAdapters.GradesMatricTableAdapter();
                     this.dtGradesMatric = adapterGradesMatric.GetDataByProfessor("123");

                     dtPessoa = new WebServiceDiario.ds.Diario.PessoaDataTable();
                     ds.DiarioTableAdapters.PessoaTableAdapter adapterPessoa = new WebServiceDiario.ds.DiarioTableAdapters.PessoaTableAdapter();
                     this.dtPessoa = adapterPessoa.GetData();

                    
                }
                catch (Exception ex)
                {
                    string teste = ex.Message;
                }
            }
           
        }



    Agora o metodo do servico:

    Code Snippet

    [WebMethod]
            public Dados atualizaCliente(String prof)
            {
                Dados dados = new Dados();
                dados.getDados("123");
                ds.Diario.AlunoDataTable d = new ds.Diario.AlunoDataTable();
                d = dados.DtAluno;
                return dados;

            }


    []´s.. vou olhar o o link q me passou.. ...
    segunda-feira, 19 de maio de 2008 17:58
  • Dalmo,

    Obrigado pela ajuda... eu apenas realizei um update na minha referencia e deu certo...

    isso porque antes tinha uma chave primaria em um datatable e no select retornava varios iguais... dai tirei apenas
    do servidor e esqueci de dar um update no cliente...

    []´s e muito obrigado
    Geraldo

    segunda-feira, 19 de maio de 2008 19:30
  • Muito bom!
     []´s
     
    segunda-feira, 19 de maio de 2008 19:38