发布的网站出错

时间:2016-03-28 18:39:33

标签: c# asp.net-mvc runtime-error

我有此代码为活动供应商发送电子邮件:

public ActionResult EnviarFornecedor(int id)
    {


        //  tenho duvida: onde criar variávelGlobal, public !void, void: para melhor visualizacao do fonte
        //  perguntar se devera criar classe  Recebendo parametros (sring strPEmail, ? qParametros): por enquanto aguardar
        //  css3 text-align shadown
        //  mauricio comentou: cores em hexa    senão erro em browsers

        try
        {
            WavebarEntities bd = new WavebarEntities();
            StringBuilder SB_Body = new StringBuilder();
            //SB_Body.Clear();
            Wavebar.Data.Pedidos1 pedidos1 = bd.Pedidos1.Find(id); // Localizar Pedidos com (ID)
            var varItemPedido1 = bd.ItemPedido1.Where(p => p.Pedido_Id == pedidos1.Id); //localizar Itens do Pedido
            var varPedidoFornecedor = new PedidoFornecedor();
            var itempedido = new ItemPedido1();
            int idFornecedorAnterior = 0;
            int i = 0;
            int j = 0;
            foreach (var k in varItemPedido1)
            {
                j++;
            }
            foreach (var varItem in varItemPedido1) // tem um erro dentro do foreach que explode no site publicado
            {
                //var varItensFornecedor1 = db.ItensFornecedor1.FirstOrDefault(i => i.Item_Id == varItem.Item_Id); // Localizar itensFornecedor first (i => i.Item_Id == item.Item_Id)    i   é um comando lambda
                //var varPedidoFornecedor = new PedidoFornecedor(); // cria esta variavel instanciada conforme: ClassPedidoFornecedor
                if (idFornecedorAnterior == 0 || idFornecedorAnterior == varItem.Fornecedor_Id)
                {
                    //cria o inicio do HTML
                    if (Convert.ToString(SB_Body) == "")
                    {
                        SB_Body.Append(motaBody(varItem.FORNECEDORES.FORN_IX_NOME));
                    }

                    varPedidoFornecedor.Descricao = varItem.Produtos1.Descricao;
                    varPedidoFornecedor.Quantidade = varItem.Quantidade.ToString();
                    varPedidoFornecedor.UnidadeMedida = varItem.UnidadesMedida1.Descricao;
                    varPedidoFornecedor.Email = varItem.FORNECEDORES.FORN_EMAIL;
                    itempedido.ValorTotal = varItem.ValorTotal;
                    itempedido.ValorUnitario = varItem.ValorUnitario;
                    //procurar/Relacionado: varItensFornecedor.FORNECEDORES.FORN_EMAIL 
                    //Popula as informações dos produtos do HtmL
                    if (i % 2 != 0)
                    {//Zebrado claro
                        if (i < j - 1)
                        {
                            SB_Body.Append("                <tr>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: left; padding-left: 4px; ' >");
                            SB_Body.Append(varPedidoFornecedor.Descricao);     //Produto
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.Quantidade);    //Quantidade
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.UnidadeMedida); //UnidadeMedida
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(itempedido.ValorUnitario);          //ValorUnitario
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;padding-right: 4px;' >");
                            SB_Body.Append(itempedido.ValorTotal);             //ValorTotal
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                </tr>");
                        }
                        else // Se final da tabela
                        {
                            SB_Body.Append("                <tr>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9; border-bottom-left-radius: 10px;padding-left: 4px;  ' >");
                            SB_Body.Append(varPedidoFornecedor.Descricao);     //Produto
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.Quantidade);    //Quantidade
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.UnidadeMedida); //UnidadeMedida
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9;text-align: right;' >");
                            SB_Body.Append(itempedido.ValorUnitario);          //ValorUnitario
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #c9c9c9; border-bottom-right-radius: 10px;padding-right: 4px;color: white; ' >");
                            SB_Body.Append(itempedido.ValorTotal);             //ValorTotal
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                </tr>");
                        }
                    }
                    else
                    {//Zebrado Escuro 
                        if (i < j - 1)
                        {
                            SB_Body.Append("                <tr>");
                            SB_Body.Append("                    <td style='height:15px;  background-color: #323232; color: white; padding-left: 4px; ' >");
                            SB_Body.Append(varPedidoFornecedor.Descricao);     //Produto
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.Quantidade);    //Quantidade
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.UnidadeMedida); //UnidadeMedida
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(itempedido.ValorUnitario);          //ValorUnitario
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px;background-color: #323232; color: white; text-align: right;padding-right: 4px;' >");
                            SB_Body.Append(itempedido.ValorTotal);             //ValorTotal
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                </tr>");
                        }
                        else // Se final da tabela
                        {
                            SB_Body.Append("                <tr>");
                            SB_Body.Append("                    <td style='height:15px;background-color: #323232;color: white; border-bottom-left-radius: 10px;padding-left: 4px;  ' >");
                            SB_Body.Append(varPedidoFornecedor.Descricao);     //Produto
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px;background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.Quantidade);    //Quantidade
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(varPedidoFornecedor.UnidadeMedida); //UnidadeMedida
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px; background-color: #323232; color: white; text-align: right;' >");
                            SB_Body.Append(itempedido.ValorUnitario);          //ValorUnitario
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                    <td style='height:15px;background-color: #323232; color: white;border-bottom-right-radius: 10px; text-align: right;padding-right: 4px;' >");
                            SB_Body.Append(itempedido.ValorTotal);             //ValorTotal
                            SB_Body.Append("                    </td>");
                            SB_Body.Append("                </tr>");
                        }
                    }
                    i++;
                }
                else
                {
                    //Finalizar o HTML e enviar
                    if (Convert.ToString(SB_Body) != "")
                    {
                        string link = "http://localhost:15351/Pedidos/ConfirmarItem?id=0";
                        SB_Body.Append("                    </table>");
                        SB_Body.Append("                    <br><br>");
                        SB_Body.Append("                    <i>Att. Equipe WaveBar</i>");

                        // mark aqui mark: NAO ESTA CERTO LINK
                        SB_Body.Append("<h3> ");
                        SB_Body.Append("    <a href='" + link.Replace("0", Convert.ToString(id)) + "'> ");
                        SB_Body.Append("        Clique para confirmar aceita&ccedil;&atilde;o do pedido");
                        SB_Body.Append("    </a>");
                        SB_Body.Append("</h3>");


                        SB_Body.Append("                </DIV>");
                        SB_Body.Append("            </BODY>");
                        SB_Body.Append("        </HTML>");
                        System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage("recursoshumanos@wavebar.com.br", varPedidoFornecedor.Email);
                        SmtpClient client = new SmtpClient();
                        client.EnableSsl = true;
                        client.Port = 587;
                        client.UseDefaultCredentials = true;
                        client.Host = "smtp.wavebar.com.br";
                        mail.Subject = "WebBar: Pedido/Solicitação de Produtos";
                        ContentType mimeType = new System.Net.Mime.ContentType("text/html"); // Add the alternate body to the message.
                        AlternateView alternate = AlternateView.CreateAlternateViewFromString(Convert.ToString(SB_Body), mimeType);
                        mail.AlternateViews.Add(alternate);
                        mail.Body = Convert.ToString(SB_Body);
                        mail.BodyEncoding = System.Text.Encoding.UTF8; // corrige problema acentuacao
                        mail.SubjectEncoding = System.Text.Encoding.UTF8; // corrige problema acentuacao
                        client.Credentials = new System.Net.NetworkCredential("recursoshumanos@wavebar.com.br", "123Mudar!@#");
                        ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
                        client.Send(mail);
                        SB_Body.Clear();
                        SB_Body.Append(motaBody(varItem.FORNECEDORES.FORN_IX_NOME));
                        varPedidoFornecedor.Descricao = varItem.Produtos1.Descricao;
                        varPedidoFornecedor.Quantidade = varItem.Quantidade.ToString();
                        varPedidoFornecedor.UnidadeMedida = varItem.UnidadesMedida1.Descricao;
                        varPedidoFornecedor.Email = varItem.FORNECEDORES.FORN_EMAIL; // procurar/Relacionado: varItensFornecedor.FORNECEDORES.FORN_EMAIL 
                        //Popular as informações dos produtos do HtmL
                        SB_Body.Append("                <tr>");
                        SB_Body.Append("                    <td style='height:15px;background-color: black; color: white; ' >");
                        SB_Body.Append(varPedidoFornecedor.Descricao); //Prod
                        SB_Body.Append("                    </td>");
                        SB_Body.Append("                    <td style='height:15px;background-color: LightBlue; color: black; text-align: right;' >");
                        SB_Body.Append(varPedidoFornecedor.Quantidade); //Qtd
                        SB_Body.Append("                    </td>");
                        SB_Body.Append("                    <td style='height:15px;background-color: LightBlue; color: black; text-align: right;' >");
                        SB_Body.Append(varPedidoFornecedor.UnidadeMedida); //UniMed
                        SB_Body.Append("                    </td>");
                        SB_Body.Append("                    <td style='height:15px;background-color: LightBlue; color: black; text-align: right;' >");
                        SB_Body.Append(itempedido.ValorUnitario);    //Valor Uni
                        SB_Body.Append("                    </td>");
                        SB_Body.Append("                    <td style='height:15px;background-color: LightBlue; color: black; text-align: right;' >");
                        SB_Body.Append(itempedido.ValorTotal);       //VT
                        SB_Body.Append("                    </td>");
                        SB_Body.Append("                </tr>");
                    }
                    else
                    {
                        //return Content("Não foi possível enviar email");
                        TempData["ErrorMsg"] = "Não foi possível enviar email";
                        return RedirectToAction("Index"); // ?funcionou: não testei
                    }
                }
                idFornecedorAnterior = varItem.Fornecedor_Id;

            }// foreach
            if (Convert.ToString(SB_Body) != "")
            {
                string link = "http://localhost:15351/Pedidos/ConfirmarItem?intpId=@p0";
                SB_Body.Append("                    </table>");
                SB_Body.Append("                    <br><br>");
                SB_Body.Append("                    <i>Att. ");
                SB_Body.Append("                    Equipe WaveBar</i>");

                // mark aqui mark: NAO ESTA CERTO LINK
                SB_Body.Append("<h3> ");
                SB_Body.Append("    <a href='" + link.Replace("@p0", Convert.ToString(id)) + "'> ");
                SB_Body.Append("        Clicar: Confirmar aceita&ccedil;&atilde;o do pedido");
                SB_Body.Append("    </a>");
                SB_Body.Append("</h3>");


                SB_Body.Append("                </DIV>");
                SB_Body.Append("            </BODY>");
                SB_Body.Append("        </HTML>");
                System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage("recursoshumanos@wavebar.com.br", varPedidoFornecedor.Email);
                SmtpClient client = new SmtpClient();
                client.EnableSsl = true;
                client.Port = 587;
                client.UseDefaultCredentials = true;
                client.Host = "smtp.wavebar.com.br";
                mail.Subject = "WebBar: Pedido/Solicitação de Produtos";
                ContentType mimeType = new System.Net.Mime.ContentType("text/html"); // Add the alternate body to the message.
                AlternateView alternate = AlternateView.CreateAlternateViewFromString(Convert.ToString(SB_Body), mimeType);
                mail.AlternateViews.Add(alternate);
                mail.Body = Convert.ToString(SB_Body);
                mail.BodyEncoding = System.Text.Encoding.UTF8; // corrige problema acentuacao
                mail.SubjectEncoding = System.Text.Encoding.UTF8; // corrige problema acentuacao
                client.Credentials = new System.Net.NetworkCredential("recursoshumanos@wavebar.com.br", "123Mudar!@#");
                ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
                client.Send(mail);
            }

            //return Content("Email enviado com sucesso");
            TempData["SuccessMsg"] = "Email enviado com sucesso";
            bd.Dispose();
            return RedirectToAction("Index"); // funcionou

        }
        catch (SmtpException) //se não estiver conectado 
        {
            TempData["ErrorMsg"] = "Falha ao enviar email - Verificar conexão da rede";
            return RedirectToAction("Index"); // funcionou
        }
        catch (Exception Eerro)
        {
            //return Content(Convert.ToString("Fracasso ao enviar email - Erro: " + Eerro));
            TempData["ErrorMsg"] = "Falha ao enviar email - Erro: " + Eerro;
            return RedirectToAction("Index"); // funcionou
        }
    }

在Localhost中:好的,有效。

但是在发布的网站上:我得到以下Eerror :(它在foreach中)

enter image description here

唯一的问题是我无法调试,谢谢!

2 个答案:

答案 0 :(得分:0)

var varItemPedido1 = bd.ItemPedido1.Where(p => p.Pedido_Id == pedidos1.Id).
....
foreach (var k in varItemPedido1)
....
foreach (var varItem in varItemPedido1)

这三行代码就是问题所在。第一个指定数据库命令,但另外两个将指定数据库中的集合(因此有2个数据库结果)。在你的第二个foreach内你可能也会在某个地方做一些数据库工作,否则你不会得到这个例外,因为数据库有一个在foreach中使用的活动打开连接。

修复是从数据库中实现列表一次,因为你在2个地方引用它,你应该在where子句之后立即这样做。

var varItemPedido1 = bd.ItemPedido1.Where(p => p.Pedido_Id == pedidos1.Id).ToList(); // retrieve the object collection from the database once!

现在,当你在内存中进行迭代时,你可以在循环中重复使用DbContext来完成其他工作。

最后你的第一次迭代,除了分配一个计数之外你什么都没做。这可以删除并替换为:

j = varItemPedido1.Count();

旁注

确保所有创建的DbContext实例都在using块或finally块中处理。这可确保在发生故障时连接不会保持打开状态。

答案 1 :(得分:0)

using(WavebarEntities bd = new WavebarEntities())
{
...
}

而不是

WavebarEntities bd = new WavebarEntities();
..
bd.Dispose();