Domanda

Se ho bisogno di andare da questo contratto di servizio:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer1 customer);
}

a questo:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer2 customer);
}

e in base a questo buon articolo: Versioning WCF capisco che quando il contratto i dati vengono modificati v'è la necessità di definire un nuovo contratto vs dati in nuovo spazio dei nomi seguiti attraverso la definizione di un nuovo vs di appalto di servizi nel nuovo spazio dei nomi, dopo di che un nuovo endpoint dovrebbero essere aggiunti.

Come esattamente sto supponiamo di avere questo fatto. C'è un esempio da qualche parte? Potresti scrivere qualcosa in base alla mia contratto di servizio mostrato in precedenza?

Grazie in anticipo!

È stato utile?

Soluzione

Secondo l'articolo collegato si dovrebbe fare qualcosa di simile:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IServiceNew : IService1
{
   [OperationContract(Name = "AddCustomerNew")]
   bool AddCustomer(DTOCustomer2 customer);
}

Poi recepirlo nel vostro servizio:

public class MyCurrentServiceImplementation : IServiceNew 
{...}

Sarà necessario ridistribuire il servizio, ma i clienti esistenti dovrebbe essere in grado di continuare a chiamare il AddCustomer di funzionamento, e nuovi clienti possono chiamare il AddCustomerNew operazione.

Altri suggerimenti

E 'molto importante notare che l'ipotesi si stato nel tuo post:

"quando il contratto i dati vengono modificati v'è la necessità di definire un nuovo vs di contratto di dati in nuovo spazio dei nomi "

non è sempre vero. Vedere "contratto dati Versioning" su MSDN per un certo numero di casi in cui un cambiamento contratto dati è antisfondamento e possono pertanto richiedere alcuna azione eccetto forse modificare l'implementazione interna del metodo di servizio per gestire la presenza / assenza di alcuni dati a causa delle differenze tra le versioni contrattuali dati.

In questo esempio specifico vorrei chiedere come due versioni di un metodo chiamato AddCustomer può variare così tanto nel loro intento che giustifica la creazione di una nuova interfaccia di servizio. Senza vedere i vostri contratti dati vecchi e nuovi non posso sapere con certezza, ma credo che il vero problema qui è che il metodo si è evoluta per accettare le informazioni sui clienti supplementari.

Se questo è vero, allora è molto simile alla situazione degli argomenti opzionali in una chiamata di metodo. WCF è progettato per gestire questo scenario molto bene come un cambiamento unificatore al contratto dati. Finché è possibile seguire le linee guida in "Best Practices: contratto dati delle versioni" su MSDN, quindi chiama fornendo sia la versione vecchia o nuova del contratto saranno accettati bene dal vostro strong> esistente interfaccia

Vorrei mantenere il mio servizio di un'interfaccia coerente, semplice e pulita (cioè evitare di fare le cose come IServiceNew) e invece basta aggiungere al contratto di dati e modificare l'implementazione di AddCustomer di adattarsi alle qualunque dati che riceve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top