Вы можете изменить WSDL, используя SoapExtensionReflector class. От Блог Кирка Эванса :
SoapExtensionReflector вызывается при отражении вашего типа для предоставления определения WSDL для вашей службы. Этот тип можно использовать для перехвата вызова отражения и изменения вывода WSDL.
В следующем примере удаляется первый метод из 2 методов веб-службы:
[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;
}
}
Создать класс, унаследованный от 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);
}
}
}
}
Добавьте это в раздел config / system.web в web.config:
<webServices>
<soapExtensionReflectorTypes>
<add type="TestWebservice.MyReflector, TestWebservice" />
</soapExtensionReflectorTypes>
</webServices>
Это должно дать вам отправную точку для динамического удаления методов из документа WSDL. Вам также нужно будет сгенерировать NotImplementedException из веб-метода, если он отключен.
Наконец, вам необходимо отключить документацию веб-службы, созданную путем вызова конечной точки .asmx без параметра? WSDL. Установите атрибут href элемента wsdlHelpGenerator для некоторого URL. Вы можете использовать DefaultWsdlHelpGenerator.aspx в качестве отправной точки для своего собственного обработчика документации. См. Вопрос по документации веб-службы в XML-файлах, август 2002 г. .