Tutti i post taggati come: ‘.net’

May
11

C#: parametri ‘Specified’ nei servizi WCF

Postato in  
Technology

Ipotizziamo di avere questo contratto in un servizio WCF:

1
2
[OperationContract]
string HelloWorld(string foo, int bar);

Nel caso in cui ci si agganci da client non-WCF, come ad esempio client dotnet 1.1 (o client non dotnet), ci si potrebbe trovare in una situazione come la seguente:

1
2
Service1.HelloWorld(string foo, bool fooSpecified
, int bar, bool barSpecified);

L’ultimo parametro viene aggiunto per esplicitare l’obbligatorietà del parametro int bar. Questo comportamento nasce dall’assenza dei tipi nullable (int?, bool?) nei framework dotnet pre-2.0.

Per risolvere questa problematica:
1. aggiungere l’attributo XMLSerializerFormat come contratto all’interfaccia esposta dal web service WCF;
2. aggiungere l’attributo DataContract DataMember[IsRequired=true] alla proprietà da serializzare

Related Posts:

Mar
5

Asp.NET TextBox: attributo MaxLength in modalità MultiLine

Postato in  
Technology

Quando vi trovate ad utilizzare il componente asp:textbox in modalità multiline, noterete che l’attributo maxlength non funziona.

Non conosco ne conosco la ragione, però esiste un work-around:

private const int MAX_LENGTH = 100;
 
protected void Page_Load(object sender, EventArgs e)
{
string lengthFunction = "function isMaxLength(txtBox) {";
    lengthFunction += " if(txtBox) { ";
    lengthFunction += 
      "     return ( txtBox.value.length <=" + MAX_LENGTH + ");";
    lengthFunction += " }";
    lengthFunction += "}";
 
this.txtMyTextBox.Attributes.Add("onkeypress", 
      "return isMaxLength(this);");
      ClientScript.RegisterClientScriptBlock(
        this.GetType(), 
        "txtLength", 
        lengthFunction , true);
 
}

(via codegod.de)

Related Posts:

Feb
22

Asp.NET e Microsoft Reporting Services: ordinare una tabella Tablix da c#

Postato in  
Technology

In alcuni casi, nel realizzare un’applicazione web ha senso appoggiarsi a Microsoft Reporting Services per consentire agli utenti di stampare il risultato di una generica griglia sulla quale è possibile applicare un sorting.

Il problema è quello di riportare l’esatto sorting applicato sulla griglia anche sul report generato da Microsoft Reporting Services.

A tal fine, quindi, la strada che ho seguito è la seguente:

1. Creare due nuovi parametri all’interno del report: DIRECTION e SORTBY (parametri stringa con valore anche eguale a stringa vuota);

2. Entrare nelle proprietà della tabella Tablix, sezione ordinamento. Inserire le due seguenti espressioni:

=iif(Parameters!DIRECTION.Value="asc"
,Fields(Parameters!SORTBY.Value).Value,0)
=iif(Parameters!DIRECTION.Value="desc"
,Fields(Parameters!SORTBY.Value).Value,0)

Imporre che la prima sia un ordinamento “da A a Z” e la seconda un ordinamento “da Z ad A”

A questo punto è sufficiente impostare questi due parametri da codice c# ed il gioco è fatto :)

(via 15seconds.com)

Related Posts:

Nov
5

c# switch sui tipi CLR

Postato in  
Technology

Related Posts:

Oct
30

Roma: Lancio di Windows 7, percorso sviluppatori

Postato in  
Technology

Sono passati oramai 3 giorni dal lancio romano di Windows7 ed io, ahimè, trovo tempo solo ora di poterne parlare.
Per chi segue la blogsfera, sicuramente sarà a conoscenza delle opinioni di Luca Sartoni in merito al lancio-show milanese di Windows 7, delle repliche della Microsoft, delle contro-repliche di Luca e di ciò che pensa Antonio Patti su questa vicenda.

Il lancio romano è stato molto meno show è molto più descrizione delle nuove funzionalità di Windows 7. In linea generale, ma c’era da aspettarselo, seppur partecipando al percorso ‘sviluppatori’, la mattinata è stata molto commerciale e generica, per cui molto fumo e poco arrosto.

Giusto il tempo di capire che, eliminando tutte le chicche grafiche di Windows 7, utili fino ad un certo punto, le due più grandi novità sono:

- possibilità di lanciare applicazioni virtualizzate in XP Mode;
- la tray bar, che mi pare di capire non sia esattamente come OSX, ma una sua evoluzione, considerato che raggruppa tutte le applicazione in esecuzione evidenziandone lo stato con un overlay sull’icona.

Nel pomeriggio si sono susseguiti una serie di talk a cura di Pietro Brambati (windows 7 e .NET), Lorenzo Barbieri (Visual studio 2010 e .NET Framework 4) e Giuseppe Guerrasio (Windows Azure).

Parecchio interessante è stato tra tutti l’intervento di Lorenzo Barbieri che, nello spiegare le nuove caratteristiche di Visual Studio 2010 si è soffermato soprattutto su Team Foundation Server 2010 (netta evoluzione rispetto al passato) e sulla nuova feature IntelliTrace che sicuramente cambierà il modo e l’approccio degli sviluppatori nella correzione dei vari bug.

Personalmente, rispetto all’intervento di Luca, ho avuto l’impressione di grossa ridimensione da parte di Microsoft nell’organizzazione generale di questi eventi. Ricordo che quando mi ci recavo a Bologna, si parlava di pranzi luculliani nei vari hotel che ospitavano i partecipanti, nell’occasione descritta ci si è limitati a consegnare un sacchetto picnic con due tramezzini, una crostatina ed una banana all’interno -segno anche questo dellla crisi in atto.

Related Posts:

Oct
29

ASP.NET v3.5 v2.0 IIS 5.1 Impossibile accedere al metabase IIS

Postato in  
Technology

Oggi sono incappato in questo errore che, ovviamente, mi ha fatto perdere un’ora di lavoro.

L’account di processo utilizzato per eseguire ASP.NET deve avere accesso in lettura al metabase IIS

Dopo alcune ricerche su Google, sono riuscito a risalire al problema. Per risolverlo, è sufficiente eseguire il comando

1
aspnet_regiis.exe -i

Related Posts:

Aug
21

Visual Studio 2008 SP1 cambiare lingua da italiano ad inglese e viceversa

Postato in  
Technology

Anche io, come Alessandro, preferisco avere i tool di sviluppo e leggere la documentazione in inglese. E’ sicuramente esente da errori di traduzione.

Ed anche io, come Alessandro, mi sono ritrovato Visual Studio 2008 in italiano dopo averlo aggiornato con la sua SP1. Dopo averci perso un pò di tempo, avevo deciso di desistere e tenermi l’IDE nella *mia* lingua.
Invece il buon Alessandro mi dice che per cambiare la lingua di Visual Studio 2008 basta seguire questo percorso:

- strumenti / opzioni -> Impostazioni Internazionali

Related Posts:

Jul
14

Microsoft .Net 3.5 Entity Framework WhitePaper

Postato in  
Technology

Documento vecchio, che ho avuto occasione di leggere solo oggi.

Un must per tutti gli sviluppatori che vogliono introdursi al Framework .Net 3.5

Related Posts:

Jul
9

C# specifiche: gli operatori condizionali

Postato in  
Technology

Noi sviluppatori spesso ci troviamo ad usare, per comodità, gli operatori condizionali (operatori condizionali in c#).

1
a = condizione ? prima_espressione : seconda_espressione;

In passato ho anche affrontato la teoria relativa ai tipi nullable, che ricordo essere dei tipi che accettano il valore null.

Oggi mi è capitato un errore compile-time che, a prima vista, potrebbe sembrare piuttosto banale:

Type of conditional expression cannot be determined because there is no implicit conversion between ‘‘ and ‘System.DateTime’

Spulciando le specifiche del linguaggio c#, ho scoperto un’interessante regola di base che, onestamente, non conoscevo.

Regola:
Ipotizziamo che X ed Y siano i tipi del secondo e terzo operando nell’espressione condizionale.
1. Se X ed Y sono dello stesso tipo, ne consegue che questo tipo è il tipo dell’espressione condizionale.
2. Nel caso in cui X ed Y siano diversi:
2a. se esiste una conversione implicita da X ad Y ma non da Y ad X, allora Y è il tipo dell’espressione condizionale;
2b. se esiste una conversione implicita da Y ad X, ma non da X ad Y, allora X è il tipo dell’espressione condizionale;
3. Nei restanti casi, non è possibile determinare il tipo dell’espressione per cui il compilatore ritorna un errore.

Esempio:

1
2
DateTime? nullableDate;  
nullableDate = (condition) ? null : DateTime.Now;

In questo caso X è null, per cui non c’è nessun tipo ad esso associabile. Nè tantomeno esiste un cast che ci dice che sia un null riferibile ad un qualche tipo specifico.

Non esiste nessuna conversione implicita da X (null) ad Y (DateTime).
Non esiste nessuna conversione implicita da Y (DateTime) ad X (null).

Secondo la regola, quindi, il compilatore deve tornare un errore.

Ovviare a questo problema è semplice: bisogna far capire al compilatore quale sia il tipo dell’espressione condizionale. Per farlo possiamo: fare un cast di entrambe le espressioni a DateTime?, oppure ancora fare un cast di null a DateTime? o, infine, fare un cast da DateTime a DateTime? (in questi ultimi due casi, esisterebbe una conversione implicita)

Related Posts:

Feb
6

c#: tipi nullable (int? char? double? float?)

Postato in  
Technology

Recentemente ho scoperto, grazie ad uno sviluppatore conosciuto da poco, l’esistenza dei tipi nullable.
Introdotti a partire dal framework .net 2.0, consentono di assegnare ad una variabile il valore null, oltre il normale range di valori.

Nel caso di una variabile int, oltre il range di valori compreso tra -2147483648 e 2147483647, sarà possibile assegnare anche il valore null.

Ancora: nel caso in cui dovessimo definire una variabile di tipo bool, oltre ai due stati true e false, sarà possibile lavorare su un terzo stato, lo stato null.

Questa tipologia di dato torna utile soprattutto nel caso in cui dovessimo trovarci a testare il valore di una variabile cui associamo un dato estratto da un database. In condizioni normali, dovremmo usare il seguente costrutto:

1
2
3
4
if (valore == null)
    x = -1;
else
    x = valore;

i tipi nullable possiedono due proprietà pubbliche e read-only: hasValue e Value.

* HasValuerestituisce true nel caso la variabile abbia un valore diverso da null
* Valuerestituisce il valore assegnato alla variabile nel caso sia diverso da null, oppure un’eccezione InvalidOperationException;

Per cui, potremmo pensare di testare il valore estratto da un database nel seguente modo:

1
2
3
4
5
int? x = campo_db;
if (x.HasValue)
    System.Console.WriteLine(x.Value);
else
    System.Console.WriteLine("Undefined");

Related Posts:

Oct
26

Nuovo logo .NET

Postato in  
Technology

Nuovo logo .NET

Related Posts:

Aug
24

Subsonic 2.1: GetCount() e GetRecordCount() System.InvalidCastException

Postato in  
Technology

Dopo una serie di polemiche sul forum, pare che finalmente siano stati risolti i problemi di Subsonic, relativi ai due metodi GetCount() e GetRecordCount() che potete richiamare sull’oggetto Select.

In realtà, la versione 2.1 final non è fixata. Potete farlo manualmente, modificando i sorgenti, facendo un rebuild della solution e sovrascrivendo il file Subsonic.dll che state utilizzando.

Fix:
Modify SqlQuery/SqlQuery.cs : line 1241
from
count = (int)scalar;
to
count = (int)Utility.ChangeType(scalar, typeof(int));

(via codplex)

Related Posts:

Feb
16

Microsoft Visual Studio: Microsoft.VDesigner ErrorCode:-1

Postato in  
Technology

L’area di progettazione dei DataSet, fornita da Visual Studio 2005, consente di agganciare una o più tabelle, eventualmente correlate tra loro, grazie ad una serie di semplici click, o drag&drop dal DataSource configurato.

Può capitare che l’IDE visualizzi l’errore “Microsoft.VDesigner ErrorCode:-1″. La motivazione sta nel fatto che si sta cercando di inserire all’interno del DataSet una tabella nella quale risulta assente la chiave primaria, sebbene sia stata definita una chiave UNIQUE.

Per risolvere l’errore, basterà modificare la struttura della tabella da aggiungere, inserendo una chiave primaria.

Related Posts:

Feb
6

c# MysqlAdapter: query select like wildcard %

Postato in  
Technology

Premessa:

  1. Installare il driver connector MySQL Connector .NET 5.1.4 ta
  2. si vuole estrarre da un database mysql un determinato
    numero di righe, sulla base di una stringa di testo passata da un campo TextBox.

Ipotizziamo di dover eseguire una clausola SQL del tipo:

1
2
SELECT oid, nome, cognome 
FROM tabella1 WHERE nome LIKE '%pippo%'

Creiamo il MysqlDataAdapter e la query parametrizzata da eseguire:

1
2
SELECT oid, nome, cognome 
FROM tabella1 WHERE nome LIKE ?nome

Grazie a Visual Studio 2005 è abbastanza banale impostare tutte le proprietà del parametro ?nome, per cui, ci basterà semplicemente richiamare il metodo FillBy nel seguente modo:

1
2
this.myTableAdapter.FillBy(this.myDataSet.tabella1
, '%'+ this.tbox_nomecognome.Text+ '%');

La particolarità sta nel fatto che se andassimo ad inserire le wildcard % direttamente nella clausola sql creata tramite Visual Studio, essa non tornerebbe alcun valore perchè il motore ado.net non riesce a sostituire correttamente il valore del parametro. Per questo motivo, si devono passare le wildcard % come fossero semplici caratteri.

Viva la Microsoft – dove tutto è bello fin quando si sta nel loro seminato, appena se ne esce si perdono 5 ore di lavoro.

Related Posts:

Feb
5

MSDN Code Gallery

Postato in  
Technology

Sono giorni di fermento per la Microsoft.

Oltre all’arcinota notizia secondo la quale Microsoft starebbe per acquistare Yahoo, ed alla nascita di una nuova piattaforma di blogging (spero vivamente non finisca come gli spaces*), ha visto la luce MSDN Code Gallery.

Si tratta di una galleria di progetti, o risorse, dove si potranno trovare molti esempi di codice prodotto per gli applicativi di casa Microsoft (vedi .Net su tutti).

*: brutti e pesanti

Related Posts: