Pergunta

I têm um webmethod simples em uma aplicação asp.net 2,0 (utilizando as extensões não os 1,0 3,5 extensões Ajax). Eu estou tentando chamar o método de jQuery e quando eu fazê-lo como os inúmeros exemplos mostram na Internet e aqui no SO, eu recebo uma mensagem de erro de servidor interno devolvidos.

Aqui está o meu código atual:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string Select(string login)
{
    UserProfile profile = UserProfile.GetUserProfile(login);

    return "{ FirstName: '" + profile.FirstName + "', " +
             "LastName: '" + profile.LastName + "', " +
             "EmailAddress: '" + profile.EmailAddress + "', " +
             "PhoneNumber: '" + profile.PhoneNumber + "' }";
 }

E agora o jQuery:

$.ajax({
    type: "POST",
    url: "Services/ProfileService.asmx/Select",
    dataType: "json",
    data: "{'login':'DOMAIN%5CUSER1'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ alert(msg); },
    error: function(xhr){ alert(xhr.statusText);}     
});

O webservice é decorado com o atributo [ScriptService] também. Se eu comentar o contentType, alterar o tipo de dados de texto, e alterar os dados para ser uma string de consulta (name = value), eu recebo o XML retornado de forma adequada.

Para onde estou indo errado?

UPDATE: Eu estou usando jQuery v1.3.1 e testar tanto em IE6 e Firefox 3. Eu estou obtendo resultados consistentes.

Foi útil?

Solução

Este foi um erro estúpido da minha parte. O problema foi resolvido. Enquanto eu incluído a referência ao Extensões AJAX, eu esqueci de reescrever o HttpHandler para os serviços ASMX para a classe ScriptHandlerFactory.

Adicionando este resolveu o problema.

Uma vez que eu tenho alguns e-mails perguntando sobre exemplos ou como eu corrigiu o problema, eu escrevi um post sobre como fazer esta sopa de nozes.

http: //randomactsofcoding.blogspot .com / 2009/03 / jquery-json-and-asmx-20-services.html

Outras dicas

Pois é. Você deve abandonar ASMX para WCF. Recomendação da própria Microsoft. Eu acho que não vai ajudá-lo em seu problema, mas você faria bem em considerar WCF ou pelo menos começar a olhar para essa tecnologia.

Eu tive o mesmo problema, mas foi fixas quando eu adicionei o seguinte para o arquivo de código

[System.Web.Script.Services.ScriptService]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top