Как вам уже сказали, WSDL - это язык описания веб-сервиса, который описывает контракт сервиса - список методов и параметров, которые сервис реализует.
В одном из проектов получал wsdl сервиса. Вот мои функции для получения wsdl web-сервиса.
private static MetadataSet GetMetadataSet(string url)
{
MetadataExchangeClientMode mode = MetadataExchangeClientMode.MetadataExchange;
int maxReceivedMessageSize = 3000000;
Uri address = new Uri(url);
Binding mexBinding = null;
if (string.Compare(address.Scheme, "http", StringComparison.OrdinalIgnoreCase) == 0)
mexBinding = MetadataExchangeBindings.CreateMexHttpBinding();
else if (string.Compare(address.Scheme, "https", StringComparison.OrdinalIgnoreCase) == 0)
mexBinding = MetadataExchangeBindings.CreateMexHttpsBinding();
else if (string.Compare(address.Scheme, "net.tcp", StringComparison.OrdinalIgnoreCase) == 0)
mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
else if (string.Compare(address.Scheme, "net.pipe", StringComparison.OrdinalIgnoreCase) == 0)
mexBinding = MetadataExchangeBindings.CreateMexNamedPipeBinding();
else
throw new Exception(string.Format("Not supported schema '{0}' for metadata exchange"));
if (mexBinding is WSHttpBinding)
{
(mexBinding as WSHttpBinding).MaxReceivedMessageSize = maxReceivedMessageSize;
mode = MetadataExchangeClientMode.HttpGet;
}
else if (mexBinding is CustomBinding)
(mexBinding as CustomBinding).Elements.Find<TransportBindingElement>().MaxReceivedMessageSize = maxReceivedMessageSize;
else
throw new Exception(string.Format("Not supported binding for metadata exchange"));
MetadataExchangeClient proxy = new MetadataExchangeClient(mexBinding);
proxy.ResolveMetadataReferences = true;
MetadataSet mds = proxy.GetMetadata(address, mode);
return mds;
}
Функция возвращает объект класса Metadataset. Этот класс содержит метаданные службы.
Чтобы получить текст wsdl из этого объекта используя такую функцию
private void SaveWsdlToFile(MetadataSet metadata, string fileName)
{
// Check for the metadata set size.
Collection<MetadataSection> documentCollection = metadata.MetadataSections;
if (documentCollection != null && documentCollection.Count > 0)
{
//Get the WSDL from the metadata set
System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;
//Save the WSDL to a file.
wsdl.Write("BapiTx.wsdl");
}
}
Здесь мы получили объект System.Web.Services.Description.ServiceDescription - объект для работы с wsdl файлом. Имея wsdl файл, можно вытащить список его методов и параметров, которые принимает сервис.