2017-09-24 2 views
0

c'est une question très simple:C# HttpWebRequest avec WSDL URL

  • Normalement, lorsque vous vous connectez avec un serveur Web que vous avez l'adresse .asmx et les différentes méthodes (dans ce cas, nous allons l'appeler WebService1. asmx et la méthode HelloWorld) .Le appel dans ce cas serait quelque chose comme ceci:

    HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create (@ "http://localhost:56405/WebService1.asmx?op=HelloWorld");

  • Dans mon cas, j'ai juste l'adresse WSDL (https://www.websirte.es:8443/webservices/methodIhavetocall?wsdl) et je connais aussi les paramètres pour appeler la méthode. Donc, si je veux créer un HttpWebRequest comment dois-je procéder?

+0

Bienvenue sur stackoverflow.com. Pouvez-vous clarifier votre question s'il vous plaît? Demandez-vous comment créer votre propre WebService à partir d'un fichier wsdl? https://stackoverflow.com/questions/1394930/how-to-generate-web-service-out-of-wsdl – wp78de

Répondre

0

Lors de l'ajout de paramètres à une URL, vous effectuez un HTTP GET. Si vous faites du SOAP "standard" sur HTTP, votre hypothèse est incorrecte. Tous les services SOAP utilisent POST. Ils peuvent techniquement utiliser GET mais généralement vous voyez POST. La raison est simple. SOAP XML est complexe et inclure dans l'URL va être une vraie douleur.

En supposant que vous avez un simple morceau de XML comme:

<Customer> 
    <Name>John</Name> 
</Customer> 

L'URL dans un get va être quelque chose horrible.

Maintenant comment un serveur sait-il quelle opération exécuter. Eh bien, il regarde la demande faite. L'opération n'est pas spécifiée dans l'URL.

Par exemple, j'ai un service qui a deux opérations ListAccountsForStatus et ListTelephonicContactsByDate qui s'exécutent toutes deux à l'adresse URL http://my-server:9100/AccountService/V1. Toutefois, les demandes semblent différents:

POST http://my-server:9100/AccountService/V1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "http://www.insol.irix.com.au/ECollNXDB_V1/EcollUtilsServices/ListTelephonicContactsByDate" 
Content-Length: 1337 
Host: my-server:9100 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 
<soapenv:Envelope> 
<soapenv:Header/> 
<soapenv:Body> 
    <ecol:ListTelephonicContactsByDate> 
    <ecol:ListTelephonicContactsByDateReq> 

     <ecol:Date>2016-08-04</ecol:Date> 
    </ecol:ListTelephonicContactsByDateReq> 
    </ecol:ListTelephonicContactsByDate> 
</soapenv:Body> 
</soapenv:Envelope> 

Et le second:

POSThttp://my-server:9100/AccountService/V1 HTTP/1.1 
    Accept-Encoding: gzip,deflate 
    Content-Type: text/xml;charset=UTF-8 
    SOAPAction: "http://www.insol.irix.com.au/ECollNXDB_V1/EcollUtilsServices/GetAccountStatusInfo" 
    Content-Length: 1329 
    Host: my-server:9100 
    Connection: Keep-Alive 
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ecol="http://www.insol.irix.com.au/ECollNXDB_V1" xmlns:irix="http://www.insol.irix.com.au/IRIX_Headers_V1" xmlns:irix1="http://schemas.datacontract.org/2004/07/IRIXContract.MsgHeaderBase"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ecol:GetAccountStatusInfo> 
      <ecol:GetAccountStatusInfoReq> 

       <ecol:accountNumber>376062766403006</ecol:accountNumber> 
      </ecol:GetAccountStatusInfoReq> 
     </ecol:GetAccountStatusInfo> 
    </soapenv:Body> 
    </soapenv:Envelope> 

Notez que l'opération est spécifié dans l'en-tête SOAPAction. Bref, pour que vous puissiez utiliser un service web SOAP.

  1. point votre bibliothèque de génération de code (dans votre look de cas pour WCF bleu, ou comment générer le code de WSDL pour C#) au WSDL et générer des classes requises.
  2. Utilisez les classes générées pour interagir avec le service en utilisant uniquement l'URL et non l'URL WSDL.

Vous ne voulez pas coder manuellement les requêtes XML et lire les réponses.