2010-12-21 6 views
6

He hecho muchas lecturas sobre cómo lograr esto y parece bastante sencillo. He creado mi servicio, que es muy simple (se parece a esto suficiente derechaLlamando al servicio WCF habilitado para AJAX desde jQuery - MVC 2

[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class WeddingPhotographerService 
{  
    // Add more operations here and mark them with [OperationContract] 
    [OperationContract] 
    public bool AddNewSkill(string name, string description) 
    { 
     IRepository<Skill> skillRepo = ObjectFactory.GetInstance<IRepository<Skill>>(); 

     var skill = new Skill { Name = name, Description = description }; 
     skillRepo.Save(skill); 
     return true; 
    } 
} 

simple, entonces escribo este código jQuery en mi opinión

$(document).ready(function() { 
    $("#AddSkill").click(function() { 
     var data = { name: $("#NewSkill").val(), description: "" }; 
     data = JSON.stringify(data) 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "WeddingPhotographerService.svc/AddNewSkill", 
      data: data, 
      dataType: "json", 
      success: function() { 
       $('#SkillListViewContainer').load('../AccountController/GetSkillControl'); 
      }, 
      error: function (msg) { 
       $("#AddSkillError").text(msg.d); 
      } 
     }); 
    }); 
}); 

Mi WeddingPhotographerService.svc está en el raíz del proyecto, el web.config añadió esta cuando creé el servicio

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="WeddingPhotographer.WeddingPhotographerServiceAspNetAjaxBehavior"> 
     <enableWebScript /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <services> 
    <service name="WeddingPhotographer.WeddingPhotographerService"> 
     <endpoint address="" behaviorConfiguration="WeddingPhotographer.WeddingPhotographerServiceAspNetAjaxBehavior" 
     binding="webHttpBinding" contract="WeddingPhotographer.WeddingPhotographerService" /> 
    </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

Todo parece bastante simple y parece que debería funcionar, pero cuando hago clic en AddSkill la consola JavaScript de Chrome se devuelve un error 404, por lo que no encuentra el servicio en absoluto (abrí la consola porque no estaba sucediendo nada cuando hacía clic en el botón).

¿Falta algo aquí?

Por cierto, yo también probamos este (ya que es el nombre en el archivo web.config )

url: "WeddingPhotographer.WeddingPhotographerService.svc/AddNewSkill" 

Y sigo teniendo el recurso no encontrado (404) de error

+0

¿Qué tal si su 'WeddingPhotographerService.svc' está ubicado en otro proyecto, cómo va a llamar esto? Tengo este escenario, espero que puedas ayudarme. – fiberOptics

Respuesta

4

Resuelto ella, cambió la línea deURL de la llamada jQuery AJAX para

url: "../WeddingPhotographerService.svc/AddNewSkill" 

y todo está bien

Cuestiones relacionadas