Vous pouvez modifier WSDL en utilisant la classe SoapExtensionReflector. De Kirk Evans Blog:
Le SoapExtensionReflector est appelée lorsque le type est réfléchi sur de fournir la définition WSDL pour votre service. Vous pouvez tirer parti de ce type pour intercepter l'appel de réflexion et modifier la sortie WSDL.
L'exemple suivant supprime la première méthode de 2 méthodes de service Web:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int Multiply(int a, int b)
{
return a * b;
}
}
Créer une classe héritée de SoapExtensionReflector:
namespace TestWebservice
{
public class MyReflector : SoapExtensionReflector
{
public override void ReflectMethod()
{
//no-op
}
public override void ReflectDescription()
{
ServiceDescription description = ReflectionContext.ServiceDescription;
if (description.PortTypes[0].Operations.Count == 2)
description.PortTypes[0].Operations.RemoveAt(0);
if (description.Messages.Count == 4)
{
description.Messages.RemoveAt(0);
description.Messages.RemoveAt(0);
}
foreach (Binding binding in description.Bindings)
{
if (binding.Operations.Count == 2)
binding.Operations.RemoveAt(0);
}
if (description.Types.Schemas[0].Items.Count == 4)
{
description.Types.Schemas[0].Items.RemoveAt(0);
description.Types.Schemas[0].Items.RemoveAt(0);
}
}
}
}
Ajouter ce à la configuration/section system.web dans web.config:
<webServices>
<soapExtensionReflectorTypes>
<add type="TestWebservice.MyReflector, TestWebservice" />
</soapExtensionReflectorTypes>
</webServices>
Ceci devrait vous donner un point de départ pour supprimer dynamiquement des méthodes du document WSDL. Vous devrez également lancer NotImplementedException à partir de la méthode web si elle est désactivée. Enfin, vous devez désactiver la documentation de service Web produite en appelant le point final .asmx sans le paramètre? WSDL. Définissez l'attribut href de l'élément wsdlHelpGenerator sur une URL. Vous pouvez utiliser DefaultWsdlHelpGenerator.aspx comme point de départ pour votre propre gestionnaire de documentation. Voir la question sur la documentation du service Web au XML Files, August 2002.
Merci pour la réponse rapide - malheureusement, il doit être SOAP. J'utilisais XMLRPC jusqu'à présent, mais l'interfaçage avec un tiers qui ne veut pas utiliser XMLRPC signifie que je dois le souiller avec SOAP. :( –
Hmm ... "bonne chance avec ça" ... –