2009-10-13 4 views
0

J'essaie de consommer un service ASMX existant en utilisant WCF avec un BasicHttpBinding. J'ai utilisé SvcUtil pour démarrer et juste extrait l'interface de définition de contrat et la config dans mon projet en laissant toutes les valeurs de configuration par défaut comme générées par SvcUtil. Ce qui suit est ce que j'ai actuellement:Le paramètre de service ASMX (chaîne de type) a une valeur nulle lorsqu'il est appelé depuis le client WCF

Contrat:

<ServiceContract()> _ 
<XmlSerializerFormat()> _ 
Public Interface IOrderProcessor 

    <OperationContract(Action:="***************/SendOrder", _ 
         ReplyAction:="*")> _ 
    Function SendOrder(ByVal strOrder As String) As String 

    <OperationContract(Action:="***************/GetAnswerback", _ 
         ReplyAction:="*")> _ 
    Function GetAnswerback(ByVal strAnswerbackGuid As String) As String 

Et Config:

<basicHttpBinding> 
    <binding name="OrderProcessor" closeTimeout="00:01:00" openTimeout="00:01:00" 
     receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
     bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
     messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
     useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

Le problème que j'ai est que la valeur de paramètre pour strOrder du service SendOrder reçu par le asmx le service est toujours nul (je ne fournis certainement pas de null à ma fin :)

Est-ce que je manque quelque chose d'évident? Où est un bon endroit pour commencer à déboguer cela?

EDIT Utilisé XMLSerializer pour le commutateur sérialiseur à SvcUtil

Répondre

1

OK a trouvé la réponse, j'ai manqué la propriété Namespace de l'attribut ServiceContract. Ooopsy !! Cela aurait dû être:

<ServiceContract([Namespace]:="***************")> _ 
<XmlSerializerFormat()> _ 
Public Interface IOrderProcessor 

<OperationContract(Action:="***************/SendOrder", _ 
        ReplyAction:="*")> _ 
Function SendOrder(ByVal strOrder As String) As String 

<OperationContract(Action:="***************/GetAnswerback", _ 
        ReplyAction:="*")> _ 
Function GetAnswerback(ByVal strAnswerbackGuid As String) As String 

Pourquoi est-ce le comportement qui en résulte? c'est-à-dire que le service est invoqué correctement mais que la valeur du paramètre n'est pas transmise ... Je suppose que cela a travaillé sur l'espace de noms de la propriété Action sur les attributs OperationContract.

+0

Le nom d'un élément XML se compose du nom local ('SendOrder', par exemple), ** plus ** de l'espace de noms. Le même nom local avec deux espaces de noms différents est deux éléments différents. Peut-être que lorsque vous n'avez pas spécifié l'espace de noms, WCF et ASMX ont différé sur l'espace de noms à utiliser "par défaut". –

Questions connexes