2010-08-04 9 views
0

J'utilise Visual Studio 2008 pour écrire un simple service Web, mais j'ai rencontré des problèmes. Vous pourriez avoir besoin de formater monSOAP Message contient une balise supplémentaire après la génération à partir de WSCF Blue dans Visual Studio 2008

Le message complet attendu est quelque chose le long des lignes de:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema targetNamespace = "http://www.website.com/WS/" 
       elementFormDefault = "qualified" 
       xmlns    = "http://www.website.com/WS/" 
       xmlns:xs   = "http://www.w3.org/2001/XMLSchema"   
    > 
     <xs:element name="QUERYFOOTBALL"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="KEY" minOccurs="1" maxOccurs="1" type="xs:string" /> 
       <xs:element name="FOOTBALL"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="HEADER" maxOccurs="1"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element name="TEAM_ID" minOccurs="1" maxOccurs="1" type="xs:string" /> 
          <xs:element name="MATCH_ID" minOccurs="1" maxOccurs="1" type="xs:string" /> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="GAME" maxOccurs="1"> 
         <xs:complexType> 
         <xs:sequence> 
          <xs:element name="ONE" minOccurs="1" maxOccurs="1" type="xs:string" /> 
          <xs:element name="TWO" minOccurs="1" maxOccurs="1" type="xs:string" /> 
         </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:schema> 

Cependant, lorsque je produis le service de la mise en page de message SOAP/appel apparaît comme si

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
     <QueryFootball xmlns="http://www.website.com/WS/"> 
      <QUERYFOOTBALL> 
      <KEY>string</KEY> 
      <FOOTBALL> 
       <HEADER> 
       <TEAM_ID>string</TEAM_ID> 
       <MATCH_ID>string</MATCH_ID> 
       </HEADER> 
       <GAME> 
       <ONE>string</ONE> 
       <TWO>string</TWO> 
       </GAME> 
      </FOOTBALL> 
      </QUERYFOOTBALL> 
     </QueryFootball> 
     </soap:Body> 
    </soap:Envelope> 

Mon code C# réel ressemble à ceci:

namespace FootballSimulator 
{ 
     [System.ServiceModel.ServiceBehaviorAttribute(InstanceContextMode=System.ServiceModel.InstanceContextMode.PerCall, ConcurrencyMode=System.ServiceModel.ConcurrencyMode.Single)] 
     public class FootballSimulator : IFootballSimulator 
     { 

      public virtual QUERYFOOTBALLRESPONSE QUERYFOOTBALL(QUERYFOOTBALL request) 
      { 
       throw new System.NotImplementedException(); 
      }   
     } 
} 

Je suppose que ma question est de savoir comment puis-je éditer le schéma/WSCFBlue afin qu'il ne force pas ce supplément dans la demande SOAP?

J'apprécierais vraiment tous les conseils/conseils que vous pourriez donner. Je peux vous donner un aperçu de ce que je faisais:

  1. en studio visuel je faites un clic droit mes 2 schémas (demande et message de réponse) et WSCFblue sélectionné puis Créer WSDL Description de l'interface
  2. Comment choisir les schémas corrects/ports J'ai fait un clic droit sur le WSDL qui a été généré dans les étapes ci-dessus et est allé sélectionné WSCFblue puis Générer le code de contrat de données (qui est fait et me donne mes objets QUERYFOOTBALL et a donné un message de QUERYFOOTBALLRESPONSE
  3. et QUERYFOOTBALLRESPONSE)
  4. J'ai fait un clic droit sur le WSDL et sélectionné WSCFblue alors Générer le code de service Web

S'il y a quelque chose d'évident que je me trompe, je l'apprécierais vraiment si vous pouviez me montrer ce que c'est. Il semble que le nom de la méthode provoque l'ajout de la balise supplémentaire autour du message soap attendu. Dans mon schéma après l'élément QUERYFOOTBALL est un autre élément appelé KEY, c'est la raison pour laquelle je ne peux pas retirer QUERYFOOTBALL et créer un objet appelé "FOOTBALL".

Ce que je veux que le service Web pour accepter est la suivante:

<?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <QUERYFOOTBALL> 
     <KEY>string</KEY> 
     <FOOTBALL> 
      <HEADER> 
      <TEAM_ID>string</TEAM_ID> 
      <MATCH_ID>string</MATCH_ID> 
      </HEADER> 
      <GAME> 
       <ONE>string</ONE> 
       <TWO>string</TWO> 
       </GAME> 
      </FOOTBALL> 
      </QUERYFOOTBALL> 
     </soap:Body> 
    </soap:Envelope> 

apprécie vraiment toute aide que vous pouvez donner, nous nous réjouissons d'entendre vos expériences/avis/conseils

Répondre

0

Mieux vaut tard que jamais. ...

Essayez d'ajouter ceci à votre méthode Web:

[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]