2011-04-15 64 views
1

有一段時間,我一直在使用Web服務,無論jQuery $ .ajax類型的用途是什麼:「POST」。它總是完成了工作,所以我從來沒有真正使用過類型:「GET」。我今天剛剛測試了「GET」,因爲我使用的這個插件(EXT甘特圖)需要GET,並且我在Firebug中獲得了此方法不允許的(405)錯誤。我想我需要啓用我的web服務來接受GET請求。我怎麼做?

接口:

[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Json)] 
List<Task> GetAllTasks(); 

[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Json)] 
List<Dependency> GetAllDependencies(); 

類:

[DataContract] 
public class Task 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Name { get; set; } 
    [DataMember] 
    public string StartDate { get; set; } 
    [DataMember] 
    public string EndDate { get; set; } 
    [DataMember] 
    public int PercentDone { get; set; } 
    [DataMember] 
    public int? ParentId { get; set; } 
    [DataMember] 
    public bool IsLeaf { get; set; } 
    [DataMember] 
    public string Responsible { get; set; } 
    [DataMember] 
    public int Duration { get; set; } 
} 

[DataContract] 
public class Dependency 
{ 
    [DataMember] 
    public int From { get; set; } 
    [DataMember] 
    public int To { get; set; } 
    [DataMember] 
    public int Type { get; set; } 
} 

方法:

public List<Task> GetAllTasks() 
    { 

     List<Task> Tasks = new List<Task>() 
     { 

     }; 

     Task temp = new Task(); 

     temp.Id = 0; 
     temp.Name = "Planning"; 
     temp.StartDate = "2010-01-06T00:00:00"; 
     temp.EndDate = "2010-01-21T00:00:00"; 
     temp.PercentDone = 40; 
     temp.ParentId = null; 
     temp.IsLeaf = false; 
     temp.Responsible = "John Doe"; 
     temp.Duration = 0; 
     Tasks.Add(temp); 

     return Tasks; 
    } 

    public List<Dependency> GetAllDependencies() 
    { 
     List<Dependency> Dependencies = new List<Dependency>() 
     { 

     }; 

     Dependency temp = new Dependency(); 
     temp.From = 11; 
     temp.To = 12; 
     temp.Type = 2; 
     Dependencies.Add(temp); 

     return Dependencies; 
    } 

的JavaScript/AJAX:

:( 「POST」 再次,使用類型時,該工程完全)
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "Services/ProjectService.svc/GetAllDependencies", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data, textStatus, xhr) { } 

}); 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "Services/ProjectService.svc/GetAllTasks", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data, textStatus, xhr) { } 

}); 

的Web.Config

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="ProjectScheduler.Services.ProjectServiceBehavior" name="ProjectScheduler.Services.ProjectService"> 
     <endpoint address="" behaviorConfiguration="http" binding="webHttpBinding" bindingConfiguration="" contract="ProjectScheduler.Services.IProjectService"> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

    <bindings> 
     <webHttpBinding> 
      <binding name="webBinding"> 
       <security mode="Transport"> 
       </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 

<behaviors> 
    <endpointBehaviors> 
    <behavior name="http"> 
     <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="ProjectScheduler.Services.ProjectServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

+0

可能重複:http://stackoverflow.com/questions/944678/making-a-wcf-web -service-work-with-get-requests – Nik 2011-04-15 17:01:59

回答

1

嘗試的界面更改爲

[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method="GET")] 
List<Task> GetAllTasks(); 

[OperationContract] 
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method="GET")] 
List<Dependency> GetAllDependencies(); 
+0

工作就像一個魅力!非常非常感謝你! <3 – Robodude 2011-04-15 17:19:37

相關問題