Windows Communication Foundation permette, in maniera estremamente semplice, di utilizzare tipi complessi sia come parametri di un servizio che come valori di ritorno: basta che essi siano marcati o con l'attributo DataContract o Serializable:
[DataContract]
public class MyClass
{
// codice....
}
[ServiceContract]
public interface IMyService
{
[OperationContract]
string MyMethod(MyClass parameter);
}
Il comportamento di default di svcutil.exe, in fase di generazione del proxy per l'accesso al servizio da parte del client, è quello di creare una classe omonima di MyClass e con i medesimi membri pubblici. Nel caso in cui MyClass sia definita in un assembly referenziato sia dal service che dal client, è tuttavia possibile fare in modo che entrambi questi attori condividano lo stesso tipo, utilizzando il parametro /reference (o la sua versione breve /r) di svcutil.exe. Supponendo che il nome dell'assembly in questione sia CommonTypes, ad esempio, possiamo scrivere:
svcutil.exe /out:"MyServiceClient.cs" /language:csharp
"http://serviceUrl/service.svc" /r:"CommonTypes.dll"
Technorati tags:
Web Services,
WCF