Errore di autenticazione con un wcf custom per SharePoint che restituisce dati in JSON
Recentemente mi è capitato di sviluppare un WCF custom per SharePoint 2010 che restituiva dati in formato JSON.
Funzionava tutto correttamente ma in alcune situazioni avevo un errore di autenticazione (HTTP 401). La cosa era strana in quanto riuscivo a debuggare il WCF fino alla fine del metodo e verificare che l'oggetto restituito aveva i dati correttamente impostati. Nonostante questo a volte ottenevo un 401.
Dopo varie indagini ho capito che il problema non era di autenticazione, ma dipendeva dai campi di tipo DateTime. Più precisamente dai limiti dei campi data. Infatti in alcuni casi venivano ritornati delle data con valori inferiori al 1/1/1970 che è la minima data gestibile in JavaScript. Imponendo valori di data superiori al 1970, tutto a ripreso a funzionare correttamente.
Vedi Date
Un altra possibile causa di problemi di autenticazione è avere una proprietà solo in get:
questo provoca un errore, per risolverlo basta aggiungere un set vuoto:
Funzionava tutto correttamente ma in alcune situazioni avevo un errore di autenticazione (HTTP 401). La cosa era strana in quanto riuscivo a debuggare il WCF fino alla fine del metodo e verificare che l'oggetto restituito aveva i dati correttamente impostati. Nonostante questo a volte ottenevo un 401.
Dopo varie indagini ho capito che il problema non era di autenticazione, ma dipendeva dai campi di tipo DateTime. Più precisamente dai limiti dei campi data. Infatti in alcuni casi venivano ritornati delle data con valori inferiori al 1/1/1970 che è la minima data gestibile in JavaScript. Imponendo valori di data superiori al 1970, tutto a ripreso a funzionare correttamente.
Vedi Date
Un altra possibile causa di problemi di autenticazione è avere una proprietà solo in get:
C#
[DataMember(Name = "beginDateJson")]
public string BeginDateJson
{
get
{
//valore calcolato basato su altre proprietà
return BeginDate.ToUnixTimeString();
}
}
C#
[DataMember(Name = "beginDateJson")]
public string BeginDateJson
{
get
{
//valore calcolato basato su altre proprietà
return BeginDate.ToUnixTimeString();
}
set
{
// vuoto
}
}