Ho creato un servizio Web tramite WCF. Quindi l'ho esposto come servizio Web per renderlo utilizzabile con un'applicazione .NET 2.0. Ho creato alcuni DataContract con DataMember che potrebbero essere utilizzati dal OperationContract esposto.Perché un attributo specificato di un servizio DataMember deve essere impostato per int e Data ma non per String
Ho notato che quando provo a creare DataClass da passare nel servizio Web che ogni attributo DataContract ora ha un attributo "Specificato" partner per ogni membro.
Ad esempio:
[DataContract]
public class Sales
{
[DataMember]
public int InvoiceNo;
...
}
Quando creo un'istanza di vendite nel client di servizi web. Ricevo l'attributo denominato InvoiceNo e InvoiceNoSpecified.
Ora questa è la mia domanda, quando l'attributo è di tipo stringa, non è necessario impostare l'attributo "Specificato" corrispondente su true, ma quando il tipo di attributo è un int o DateTime, se non si imposta il corrispondente all'attributo "Specificato" su true, il valore diventa null nell'host del servizio Web. C'è un modo per evitare di impostare l'attributo Specificato? Perché devo chiamare le funzioni del servizio web in molti punti del mio codice. Sarebbe davvero difficile tenerne traccia di tutti.
Ho provato a utilizzare DefaultValueAttribute per questo. Quando utilizzo un valore predefinito, ciò che accade è anche se imposto il valore del parametro data nel client.Dal momento che non ho impostato dataSpecified = true, il valore della data è sempre il valore predefinito. // codice al client prm.DepositDate = dtp_Deposit.Value.Date; // codice al servizio [DefaultValue (typeof (DateTime), "1900/01/01")] DepositDate pubblico; – Nap
Grazie amico. Ho avuto lo stesso problema con i servizi python soaplib e i client .net. Ho sempre dovuto impostare Specificato su true. Ecco un esempio su come risolverlo in Python: @rpc (soap_types.Int (min_occurs = 1), _returns = soap_types.String) –
Elalfer