‹wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"›
Чудесный Web-сервис калькулятора
‹/wsdl:documentation›
Вы, наверное, уже догадались что вполне возможно построить пользовательскую утилиту (например, объектный браузер Web-сервиса XML) для считывания значений, содержащихся в контексте элемента ‹documentation›. Однако в большинстве случаев соответствующее значение будет использоваться файлом DefaultWsdlHelpGenerator.aspx.
Последним из рассматриваемых здесь свойств типа WebServiceAttribute является свойство Name, которое используется для указания имени Web-сервиса XML, водимого внешним пользователем. По умолчанию внешнее имя Web-сервиса идентично имени соответствующего типа класса (которым, в свою очередь по умолчанию является имя Service). Однако если вы хотите "отделить" имя класса .NET от соответствующего WSDL-имени, вы можете изменить атрибут [WebService] так, как показано ниже.
[WebService( Description= "Чудесный Web-сервис калькулятора",
Namespace= "http://www.IntertechTraining.com/",
Name= "CalculatorWebService")];
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
{…}
На рис. 25.5 показана страница тестирования, автоматически сгенерированная с помощью DefaultWsdlHelpGenerator.aspx с учетом указанного значения атрибута [WebService].
Рис 25.5. Web-сервис CalculatorWebService
Атрибут [WebServiceBinding]
В .NET 2.0 Web-сервис XML может содержать атрибут [WebServiceBinding]. Среди прочего этот атрибут используется для того, чтобы указать соответствие данного Web-сервиса XML "базовому профилю совместимости Web-сервисов (WSI) версии 1.1". Но что это значит? Если вы активно работаете с Web-сервисами XML, вы должны знать, что спецификации WSDL в процессе развития этой технологии изменялись. Вследствие этого вполне обычной оказывается ситуация, когда один и тот же элемент (или атрибут) WSDL имеет разные интерпретации в разных системах разработки (IIS, WSAD), Web-серверах (IIS, Apache) и архитектурах (.NET, J2EE).
Очевидно, для Web-сервиса XML это оказывается проблемой, поскольку одной из задач разработки является упрощение способа обработки информации в межплатформенном мультиархитектурном и многоязычном окружении. Чтобы решить проблему, для повышения уровня межплатформенной совместимости Web-сервисов организация WSI предлагает использовать открытые спецификации. В .NET 2.0 свойству ConformsTo атрибута [WebServiceBinding] можно назначить любое значение из перечня WsiProfiles.
public enum WsiProfiles {
// Web-сервис не делает никаких заявлений о совместимости.
None,
// Web-сервис объявляет о совместимости
// с базовым профилем WSI версии 1.1.
BasicProfile1_1
}
По умолчанию Web-сервисы XML, генерируемые с помощью Visual Studio 2005, предполагают согласованность с базовым профилем WSI 1.1. Конечно, простое приравнивание свойства ConformsTo к WsiProfiles.BasicProfile1_1 не гарантирует, что каждый Web-метод будет действительно совместим с этим профилем. Например, одно из правил ВР 1.1 гласит, что каждый метод WSDL-документа должен иметь свое уникальное имя (т.е. ВР 1.1 не допускает перегрузку Web-методов). Но хорошей вестью здесь является то, что среда выполнения ASP.NET позволяет определить различные уровни соответствия ВР 1.1 и сообщит об этом во время выполнения.
Игнорирование проверки соответствия правилам ВР 1.1
В .NET 2.0 Web-сервисы XML автоматически проверяются на соответствие спецификациям базового профиля WSI версии 1.1 (ВР 1.1). В большинстве случаев это хорошо, поскольку позволяет создавать программное обеспечение с самыми широкими возможностями совместимости. Однако в некоторых случаях бывает нужно пренебречь совместимостью с ВР 1.1 (например, при создании внутренних Web-сервисов XML, когда совместимость не столь важна). Чтобы дать указание среде выполнения игнорировать нарушение правил ВР 1.1, установите свойство ConformsTo равным WsiProfiles.None, а свойство EmitConformanceClaims – равным false (ложь).
[WebService(Description = "Чудесный Web-сервис калькулятора",
Namespace = "http://www.IntertechTraining.com/",
Name = "CalculatorWebService")]
[WebServiceBinding( ConformsTo =WsiProfiles.None,
EmitConformanceClaims = false")]
public class Service: System.Web.Services.WebService {…}
Как и следует ожидать, от значения, присвоенного свойству EmitConformanceClaims, зависит, будут ли при публикации WSDL-описания Web-сервиса учиты-ваться сообщения соответствия свойства ConformsTo. В данном случае нарушение правил ВР 1.1 разрешается, но автоматически генерируется страница тестирования все равно будет отображать предупреждения.
Читать дальше