Inquiridor
O servidor remoto retornou um erro: (404) Não Localizado.

Pergunta
-
public decimal CalculaSedex(string cepOrigem, string cepDestino, decimal peso, bool MaoPropria, bool avisoRecebimento, decimal valorDeclarado = 0.0m)
{
decimal functionReturnValue = default(decimal);
//Cria uma requisição ao service dos correios, com os dados informados
System.Net.WebRequest Req = System.Net.WebRequest.Create("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx" + "cepOrigem=" + cepOrigem + "&cepDestino=" + cepDestino + "&peso=" + peso.ToString().Replace(",", ".") + "&resposta=xml");
System.Net.WebResponAse Resp = Req.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(Resp.GetResponseStream(), System.Text.Encoding.UTF7);
System.Data.DataSet ds = new System.Data.DataSet();
//Coloca os dados recebidos em um DataSet
ds.ReadXml(sr);
sr.Close();
Resp.Close();
if (Convert.ToInt16(ds.Tables["erro"].Rows[0]["codigo"].ToString()) != 0) {
throw (new Exception(ds.Tables["erro"].Rows[0]["descricao"].ToString()));
} else {
functionReturnValue = (Convert.ToInt16(ds.Tables["Dados_Postais"].Rows[0]["preco_postal"].ToString().Replace(".", ",")));
}
return functionReturnValue;
}
protected void cmdCalcular_Click(object sender, EventArgs e)
{
try {
decimal preco = CalculaSedex("27330680", (txtCEPDestino.Text), 1.23m, false, true, 120.5m);
lblResultado.Text = "O valor do frete é " + string.Format(CultureInfo.GetCultureInfo("pt-BR"), "{0:C}", preco);
}
catch (Exception ex)
{
lblResultado.Text = ex.Message;
}
}
compila e quando abre no servidor local ,quando clico no botão para buscar o cep e calcular aparece O servidor remoto retornou um erro: (404) Não Localizado.
Todas as Respostas
-
-
-
-
-
-
segue o codigo completo o erro esta na linha ref--115{
using System;
Response.Redirect("Autenticar.aspx");
-----> 115 }
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LojaVirtual.DAO;
using LojaVirtual.BLL;
using System.Globalization;
using System.Xml;
namespace LojaVirtual.WEB
{
public partial class CarrinhoCompra : System.Web.UI.Page
{
int codProduto = 0;
Carrinho car = new Carrinho();
ProdutoBLL produtobll = new ProdutoBLL();
protected void Page_Load(object sender, EventArgs e)
{
lblMsg.Visible = false;
BuscarItens();
}
public void BuscarItens()
{
if (car.Itens.Count > 0)
{
grvCarrinho.DataSource = car.Itens;
grvCarrinho.DataBind();
lblMsg.Visible = false;
}
else
{
lblMsg.Text = "Não há itens no carrinho de compra.";
lblMsg.Visible = true;
grvCarrinho.DataBind();
}
}
protected void grvCarrinho_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Footer)
{
codProduto = ((ITEM_VENDA)e.Row.DataItem).IDT_PRODUTO;
ProdutoBLL produtobll = new ProdutoBLL();
PRODUTO produto = produtobll.Find(p => p.IDT_PRODUTO == codProduto).First();
((Label)e.Row.FindControl("lblDescricao")).Text = produto.NOME;
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[1].Text = "Total de Itens Selecionados: " + car.QuantidadeTotal().ToString();
e.Row.Cells[4].Text = String.Format("{0:C}", car.ValorTotal());
}
}
protected void grvCarrinho_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
if (car.ExcluirItem(int.Parse(grvCarrinho.DataKeys[e.RowIndex].Value.ToString())))
{
BuscarItens();
Master.AtualizarCarrinho();
}
}
protected void btnPagar_Click(object sender, ImageClickEventArgs e)
{
if (Session["cliente"] != null)
{
CLIENTE cliente = new CLIENTE();
cliente = (CLIENTE)Session["cliente"];
PRODUTO prd = null;
//Finaliza a venda do cliente
int idCodigoVenda = car.FinalizarVenda(cliente.IDT_CLIENTE, 5); //Este tipo de pagamento deve vir da tela.
VendaPagSeguro1.CodigoReferencia = idCodigoVenda.ToString();
VendaPagSeguro1.Produtos = new List<UOL.PagSeguro.Produto>();
foreach (ITEM_VENDA item in car.Itens)
{
UOL.PagSeguro.Produto produto = new UOL.PagSeguro.Produto();
produto.Codigo = item.IDT_PRODUTO.ToString();
prd = new PRODUTO();
prd = produtobll.BuscarProduto(item.IDT_PRODUTO);
produto.Descricao = prd.NOME;
produto.Quantidade = item.QUANTIDADE;
produto.Valor = double.Parse(item.VALOR_UNITARIO.ToString());
VendaPagSeguro1.Produtos.Add(produto);
}
prd = null;
VendaPagSeguro1.Cliente = new UOL.PagSeguro.Cliente();
VendaPagSeguro1.Cliente.Nome = cliente.NOME;
VendaPagSeguro1.Executar(this.Response);
}
else
{
Response.Redirect("Autenticar.aspx");
}
}
public decimal CalculaSedex(string cepOrigem, string cepDestino, decimal peso, bool MaoPropria, bool avisoRecebimento, decimal valorDeclarado = 0.0m)
{
decimal functionReturnValue = default(decimal);
//Cria uma requisição ao service dos correios, com os dados informados
System.Net.WebRequest Req = System.Net.WebRequest.Create("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx" + "?cepOrigem=" + cepOrigem + "&cepDestino=" + cepDestino + "&peso=" + peso.ToString().Replace(",", ".") + "&resposta=xml");
System.Net.WebResponse Resp = Req.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(Resp.GetResponseStream(), System.Text.Encoding.UTF7);
System.Data.DataSet ds = new System.Data.DataSet();
//Coloca os dados recebidos em um DataSet
ds.ReadXml(sr);
sr.Close();
Resp.Close();
if (Convert.ToInt16(ds.Tables["erro"].Rows[0]["codigo"].ToString()) != 0) {
throw (new Exception(ds.Tables["erro"].Rows[0]["descricao"].ToString()));
} else {
functionReturnValue = (Convert.ToInt16(ds.Tables["Dados_Postais"].Rows[0]["preco_postal"].ToString().Replace(".", ",")));
}
return functionReturnValue;
}
public void cmdCalcular_Click(object sender, EventArgs e)
{
try {
decimal preco = CalculaSedex("27330680", (txtCEPDestino.Text), 1.23m, false, true, 120.5m);
lblResultado.Text = "O valor do frete é " + string.Format(CultureInfo.GetCultureInfo("pt-BR"), "{0:C}", preco);
}
catch (Exception ex)
{
lblResultado.Text = ex.Message;
}
}
}
} -
-
-
-
Olá Jonatas!
Você já pensou na possibilidade de utilizar os web services dos Correios para fazer esse tipo de cálculo? Me parece mais simples do que você está fazendo, veja só:
Acessando os web services dos Correios com C# e VB.NET (consulta de CEPs e preços)
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Andre ,boa tarde
cheguei ver seu tutorial no seu site , excelente.E com aquele metodo daria para colocar no site somente o campo digitar cep e chamar o valor do sedex , criando um metodo no botão click e entrar o valor do sedex no carrinho para enviar para pagamento ?
-
Olá Jonatas!
Com a chamada do web service você consegue passar um CEP e outras informações do pacote (como dimensões, tipo de envio, etc) e ele te retorna o preço que você pode adicionar no seu carrinho de compras..
Abraço!
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -