2015-12-10 2 views
2

Voici le scénario. Il existe un contrat de service existant avec certaines méthodes qui sont consommées par une application de bureau. Maintenant, besoin d'exposer certains contrats d'exploitation via ReST. Mais il exige d'exposer toutes les méthodes en tant que ReST. Sinon il y a une exception avec le texte ci-dessous qui vient souvent si les params sont emballés.Exposer les contrats d'opération sélectionnés comme ReST provoquant une erreur Opération 'nom de la méthode' du contrat 'IContract' spécifie le corps de la requête multiple

Vraiment déroutant. On dirait un bug dans le cadre.

Message d'erreur -

« SaveEntitiy » Le fonctionnement du contrat « IService » spécifie plusieurs paramètres du corps de demande à être sérialisés sans aucun élément d'enveloppe. Au plus un paramètre de corps peut être sérialisé sans éléments wrapper. Supprimez les paramètres de corps supplémentaires ou définissez la propriété BodyStyle sur WebGetAttribute/WebInvokeAttribute sur Wrapped.

Contrat d'exploitation.

[ServiceContract] 
public interface IService 
{ 
     [OperationContract] //No need to expose this as ReST 
     string SaveEntity(int id,string name); 

     [OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] 
     string GetData(int value); 
} 

Si nous exposons le SaveEntity comme fonctionne tout ReST. Signifie que les configs sont corrects.

+0

Modifier WebInvoke à WebGet et spécifier UriTemplate – Maximus

+0

@ Maximus, dites-vous que c'est le problème avec WebInvoke ne permettant pas d'avoir des méthodes non ReST? Dans mon code actuel, j'ai des méthodes POST (contrats d'exploitation) dans le même contrat de service. Là, je ne peux pas éviter WebInvoke –

Répondre

0

Comme vous essayez d'utiliser Parvenez aller avec WEBGET méthode comme ci-dessous:

[WebGet (UriTemplate = « GetData/input/{valeur} »)]

Ou

Vous pouvez également essayer d'utiliser [WebGet] seul.

+0

Il existe des méthodes POST qui nécessitent également WebInvoke –