FullCalendar и WCF - PullRequest
       1

FullCalendar и WCF

0 голосов
/ 08 сентября 2010

Я пытался получить данные из службы wcf и в элемент управления fullcalendar. Однако мне не повезло, и я удивился, что я делаю не так.

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 на странице без полного календаря. Это было так, чтобы я мог проверить, как подключиться к службе wcf через jquery.

Но когда я использую опцию события fullcalendar, ничего не происходит. он даже не подключает службу wcf вообще (я попытался отладить службу, но ничего не произошло).

любая помощь будет оценена

спасибо

1 Ответ

0 голосов
/ 13 апреля 2011

Я знаю, что это 7 месяцев, но - попробуйте снять косую черту с URL-вызова в вызове $ .ajax.

Я думаю, что вы хотите: "http://localhost: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
        }

});

Также - рассмотрите возможность изменения bodystyle вашего параметра вызова Webinvoke BodyStyle на BodyStyle = WebMessageBodyStyle.WrappedRequest (я читал, что вы получите ошибку с простым переносом). И не уверен, что вы уже это делаете, но обязательно закодируйте начальные и конечные значения в вашем списке / массиве в виде меток времени Unix или одного из допустимых типов дат. ваш web.config хорош.

Вот кое-что, что я протестировал (.net 4.0) с вышеупомянутым вызовом ajax fullcalendar, за исключением того, что я использовал список, а не массив - я предполагаю, что вы можете читать в стандартные даты, которые тоже не будут работать, поэтому есть здесь функция для преобразования дат в метки времени 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;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...