2010-09-08 22 views
0

我一直在試圖從一個wcf服務獲取數據並進入fullcalendar控件。但是,我沒有運氣,想知道我做錯了什麼。FullCalendar和WCF

的JScript:

$('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,basicWeek,basicDay' 
     }, 
     editable: false, 
     height: 200, 
     aspectRatio: 100, 
     events: "http://localhost:63295/_services/Service2.svc/DoWork/" 

等等

WCF接口:

[ServiceContract] 
public interface IService2 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]  
    string[] DoWork(); 
} 

WCF服務:

public string[] DoWork() 
{ 
    // Add your operation implementation here 
    SortedDictionary<string, string> d = new SortedDictionary<string, string>(); 

    NameValueCollection AE = new NameValueCollection(); 

    SqlDataReader sdr = ReadData("SelectALLAE"); 
    while (sdr.Read()) 
    { 
     AE.Add("title", sdr["AE_EmployeeID"].ToString() + " " + sdr["AE_EmployeeName"].ToString() + " " + sdr["AE_EventCode"].ToString()); 
     AE.Add("start", sdr["AE_StartDateTime"].ToString()); 
     AE.Add("end", sdr["AE_EndDateTime"].ToString()); 
    } 

    return AE.GetValues(0).ToArray(); 
} 

Web.config文件:

<system.serviceModel> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="CountryProvinceBehavior"> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
      <endpointBehaviors> 
       <behavior name="CountryProvinceBehavior"> 
        <webHttp/> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
     <services> 
      <service behaviorConfiguration="CountryProvinceBehavior" name="TimesheetsV2._0_Investigations._services.Service2"> 
       <endpoint address="" binding="webHttpBinding" contract="TimesheetsV2._0_Investigations._services.IService2" behaviorConfiguration="CountryProvinceBehavior"/> 
      </service> 
     </services> 
    </system.serviceModel> 

我已經在沒有完整日曆的頁面上成功連接到此wcf。這是我可以測試如何通過jQuery連接到wcf服務。

但是,當我使用fullcalendar事件選項,沒有任何反應。它甚至沒有連接wcf服務(我試圖對服務進行調試,但什麼也沒有發生)。

任何幫助,將不勝感激

感謝

+0

如果您發佈的代碼或XML(如web.config文件),** **請在高亮文本編輯器的線和編輯器工具欄上的漂亮格式點擊「代碼」按鈕(101 010)並語法突出顯示它! – 2010-09-08 16:52:01

回答

0

我知道這是7個月大,但 - 嘗試採取尾隨削減掉在$就調用的URL電話。

我想你想: 「HTTP://本地主機:63295/_services/Service2.svc/DoWork的」

試試這個:

$("#calendar").fullCalendar({ 
     events: { 
      url: 'http://localhost:63295/_services/Service2.svc/DoWork', 
      type: 'POST', 
      data: '{}', 
      error: function() { 
       alert('there was an error while fetching events!'); 
      }, 
      color: 'yellow', // a non-ajax option 
      textColor: 'black' // a non-ajax option 
     } 

}); 

而且 - 考慮改變您的通話webinvoke的bodystyle BodyStyle參數BodyStyle = WebMessageBodyStyle.WrappedRequest(我讀過,你會得到一個簡單的包裝錯誤)。並且不確定是否已經這樣做了,但一定要將您的開始和結束值作爲unix時間戳或允許的日期類型之一編碼到您的列表/數組中。 你的web.config很好。

下面是我測試過的(.net 4.0)上面的fullcalendar ajax調用,除了我使用了一個不是數組的列表 - 我假設你可能正在閱讀標準日期,這也不起作用,所以有這裏有一個函數可以將日期轉換爲unix時間戳,如果您已經使用了unix時間戳,就可以避開它。

[WebInvoke(Method="POST", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json)] 
[OperationContract] 
public List<AELIST> DoWork() 
{ 
    SqlConnection sqlconn = new SqlConnection(); 
    sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["YourConnNameInWebConfig"].ConnectionString; 
    sqlconn.Open(); 
    string sqlstring = "Select * from YourTable"; 
    SqlCommand sqlcomm = new SqlCommand(sqlstring, sqlconn); 
    SqlDataReader sreader = sqlcomm.ExecuteReader(); 
    List<AELIST> AE = new List<AELIST>(); 
    while (sdr.Read()) 
    { 
     DateTime dsx = Convert.ToDateTime(sdr["AE_StartTime"]); 
     Double mystart = ConvertToTimestamp(dsx); 
     DateTime dex = Convert.ToDateTime(sdr["AE_EndDateTime"]); 
     Double myend = ConvertToTimestamp(dex); 
     AELIST AEEntry = new AELIST<>(); 
     AEEntry.title = sdr["AE_EmployeeID"].ToString() + " " + sdr["AE_EmployeeName"].ToString() + " " + sdr["AE_EventCode"].ToString(); 
     AEEntry.start = mystart.ToString(); 
     AEEntry.end = myend.ToString(); 
     AE.Add(AEEntry); 
    } 
    sqlconn.Close(); 
    sdr.Close(); 
    sreader.Dispose(); 
    sqlcomm.Dispose(); 

return AE; 
} 
private double ConvertToTimestamp(DateTime value) 
{ 
    TimeSpan span = (value - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime()); 
    return (double)span.TotalSeconds; 
} 

public class AELIST 
{ 
public string title {get; set;} 
public string start {get; set;} 
public string end {get; set;} 
}