Mon problème est étroitement lié à celui-ci: How can I use .NET web services from non-standard ports?. Mon service Web s'exécute derrière un pare-feu de transfert de port, de sorte que les numéros de port signalés dans le document WSDL contiennent le port interne à numéro élevé. J'ai écrit une classe SoapExtensionReflector qui est capable de réécrire le document WSDL. Ainsi, une requête comme example.com/path/loginservice?wsdl est gérée correctement.Fix port serverice Web non standard sur contractRef et docRef
Cependant, cela ne gère pas la demande "disco": example.com/path/loginservice?disco. Cela renvoie un document XML comme ceci:
<discovery>
<contractRef ref="http://example.com:10092/loginservice.asmx?wsdl" docRef="http://example.com:10092/loginservice.asmx"/>
<soap address="http://example.com/path/loginservice.asmx" binding="q1:LoginServiceSoap"/>
<soap address="http://example.com/path/loginservice.asmx" binding="q2:LoginServiceSoap12"/>
</discovery>
Alors que les liaisons de savon ont été correctement réécrite par le SoapExtensionReflector, les URL contractRef et docRef ont le port de haut numéroté. Comment puis-je les réécrire aussi?
Je n'ai pas trouvé une solution. Je suis passé à WCF. J'ai encore dû écrire des extensions pour corriger le problème de port, en utilisant WCFExtras. Cela nettoie le WSDL, mais j'ai toujours le numéro de port affiché sur la page Web .svc, bien que ce soit relativement inoffensif. –