2010-04-12 4 views
2

J'ai un service Web WCF (utilisant basicHTTPBinding) auquel je me connecte depuis une application Flex. J'utilise la génération de code FlexBuilder pour créer un proxy pour le service Web.Erreur IsEmpty lors de l'appel de la méthode WCF sans paramètre à partir de Flex

Cela a fonctionné très bien jusqu'à ce que j'essaie d'appeler une méthode sur le service Web qui n'a aucun paramètre. Voici sa déclaration d'interface:

[OperationContract] 
    DateTime GetCurrentDateTime(); 

J'ai ensuite commencé à recevoir des réponses de code HTTP 500 du service.

Inspecter la réponse HTTP avec Fiddler montre que WCF signale l'erreur suivante:

Error in deserializing body of request message for operation 'GetCurrentDateTime'. 
The OperationFormatter could not deserialize any information from the Message because the Message is empty (IsEmpty = true) 

Il semble donc qu'il y ait une incompatibilité entre Flex et WCF Whan appeler des méthodes qui n'ont pas paramaters - Flex ne inclure quelque chose dans le message mais WCF s'attend à ce que quelque chose soit là.

Est-il possible de configurer Flex ou WCF pour contourner ce problème ou dois-je inclure des paramètres factices dans ces contrats d'opération?

Répondre

0

Je peux invoquer une requête Web sans paramètres.

WCF:

[ServiceContract] 
public interface ICurrentDateTimeService 
{ 
    [OperationContract] 
    DateTime GetCurrentDate(); 
} 

public class Service1 : ICurrentDateTimeService 
{ 
    public DateTime GetCurrentDate() 
    { 
     return DateTime.Now; 
    } 
} 

Flex:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="init()"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     import services.currentdatetimeservice.CurrentDateTimeService; 

     private var service:CurrentDateTimeService = new CurrentDateTimeService(); 

     public function init():void { 
      service.addEventListener(ResultEvent.RESULT, serviceResult); 
      service.addEventListener(FaultEvent.FAULT, serviceFault); 
      service.GetCurrentDate(); 
     } 

     public function serviceResult(e:ResultEvent):void { 
      trace(e.result); 
     } 

     public function serviceFault(e:FaultEvent):void { 
      trace("Oh no! :("); 
     } 

    ]]> 
</fx:Script> 
</s:Application> 

Résultat Thu Aug 4 01:11:12 GMT-0600 2011

Avez-vous un écouteur pour l'événement de défaut?

Questions connexes