none
Spring.NET - Web Services RRS feed

Respostas

  • É isso aí mesmo brow ...   confundi, não é BeginAsync, é BeginInvoke mesmo.

    Engraçado. Eu fiz isso na app web e dava erro exatamente nesta linha
      IApplicationContext ctx = ContextRegistry.GetContext();

    e é exetamente igual.

    Eu fiz na Web. Não sei se vc fez em desktop ...
    Vo ver em detalhes o erro, pq isso é mto importante pra mim. Não agora, mas se eu precisar antender requisitos de performance, tava lascado.

    Obrigado Eric

    Bruno Gallego - Se este poste foi útil, por favor, classifique
    sexta-feira, 20 de março de 2009 23:30

Todas as Respostas

  • Eric, Aproveitando q vc está afiado com Spring ...

    Eu uso o IoC do spring normalmente, funciona bem.
    Porém quando chamo o método usando delegate com BeginAsync ( de forma assíncrona ), ele gera erro no método GetContext.

    Tem alguma idéia do que seja? o Projeto é web e funciona normal quando chamo sem delegate.

    Acho q o problema está pq como é beginasync , internamente deve criar outra thread ...

    Obrigado
    Bruno Gallego - Se este poste foi útil, por favor, classifique
    quarta-feira, 18 de março de 2009 18:18
  • Bruno,

    Eu não estou por dentro do que é exatamente BeginAsync. Me manda um exemplo do teu código que eu dou uma pesquisada aqui. Me passa também a idéia do que vc está tentando fazer. As vezes tem outras formas mais simples.


    Abraço,

    Eric
    quinta-feira, 19 de março de 2009 12:05
  • Eric,

        Desde já agradeço a atenção.

        Tenho um método no DAO que faz uma operação no banco (um insert, update ou delete).
        Gostaria de criar um  "InsertAsync" , "UpdateAsync" "DeleteAsync"  para executar de forma assíncrona (em paralelo).
        Então fiz o seguinte: Criei delegates para os métodos de insert, update e delete e chamei delegateInsert.BeginAsync()  ao invés do delegate.Invoke()  //q é sincrono.

        Mas qdo chamo de forma assíncrona ocorre erro ao obter o contexto do spring. Tem alguma idéia.

        Para simular, vc pode fazer o seguinte: Cria um método q instancia um objeto via Ioc do spring. Só isso.
        Aí vc chame este método criado via delegate BeginAsync.

    Obrigado

    Bruno

    Bruno Gallego - Se este poste foi útil, por favor, classifique
    quinta-feira, 19 de março de 2009 14:48
  • Bruno,

    Eu particularmente não conhecia essa história do BeginAsync. E não consegui de fato reproduzir a idéia. Achei esse post (http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/60e17625-1623-422d-b35b-93332e44d3f7/, por um acaso seu), sobre o assunto, e creio que consegui reproduzir a mesma idéia com BeginInvoke (não achei esse método BeginAsync! é da FW 3.5?).

    Aqui funcionou perfeitamente o processo de pegar o contexto e usar um objeto do contexto.

    Talvez se vc conseguir mandar um exemplo do teu código, eu possa te ajudar melhor.



      private delegate void TesteDelegate(); 
       
       
      private void asyncMethod(){ 
        IApplicationContext ctx = ContextRegistry.GetContext(); 
        IPedidoBO p = (IPedidoBO)ctx.GetObject("PedidoBO"); 
        p.pegarPedidoPorID(1); 
      } 
       
      protected void btnExecAsyncClick(object sender, EventArgs e) {       
        TesteDelegate a = new TesteDelegate(asyncMethod); 
        a.BeginInvoke(callback, null); 
        btnExecAsync.Text = "Piko"
      } 
       
      private void callback(IAsyncResult r){ 
      } 







    Abraço,

    Eric
    quinta-feira, 19 de março de 2009 16:53
  • É isso aí mesmo brow ...   confundi, não é BeginAsync, é BeginInvoke mesmo.

    Engraçado. Eu fiz isso na app web e dava erro exatamente nesta linha
      IApplicationContext ctx = ContextRegistry.GetContext();

    e é exetamente igual.

    Eu fiz na Web. Não sei se vc fez em desktop ...
    Vo ver em detalhes o erro, pq isso é mto importante pra mim. Não agora, mas se eu precisar antender requisitos de performance, tava lascado.

    Obrigado Eric

    Bruno Gallego - Se este poste foi útil, por favor, classifique
    sexta-feira, 20 de março de 2009 23:30
  • Tem uma coisa que tem que tomar cuidado que é dar um ContextRegistry.GetContext() dentro de um construtor.

    Se vc faz isso, é StackOverflow na certa:

    1) Quando vc sobe o contexto tenta criar a instância do objeto configurado no contexto
    2) Quando o contexto tenta instanciar o objeto, ele chama o construtor, voltamos ao passo 1.

    Não é difícil cair numa dessas.

    Talvez configurar mais de um construtor pra classe e usar um separado que chame o GetContext() funcione, desde que o objeto no spring não seja instanciado por ele.
    segunda-feira, 23 de março de 2009 10:52