Поделиться через


Взаимодействие с веб-службами ASP.NET

Взаимодействие между веб-службами ASP.NET и веб-службами Windows Communication Foundation (WCF) возможно, если обеспечить, чтобы службы, реализованные с помощью обеих технологий, соответствовали спецификации WS-I Basic Profile 1.1. Веб-службы ASP.NET, соответствующие спецификации WS-I Basic Profile 1.1, могут взаимодействовать с клиентами WCF с помощью предоставляемой системой привязки WCF — BasicHttpBinding.

Используйте имеющуюся в ASP.NET 2.0 возможность добавления атрибутов WebService и WebMethodAttribute в интерфейс, а не в класс, и создания класса для реализации интерфейса, как показано в следующем примере кода.

[WebService]
public interface IEcho
{
    [WebMethod]
    string Echo(string input);
}

public class Service : IEcho
{

   public string Echo(string input)
   {
        return input;
    }
}

Использование этого варианта предпочтительно, так как интерфейс с атрибутом WebService составляет контракт для операций, выполняемых службой, доступный для повторного использования в различных классах, которые могут реализовывать этот же контракт другими способами.

Избегайте использования атрибута SoapDocumentServiceAttribute для маршрутизации сообщений методам по полному имени элемента тела SOAP-сообщения, а не по заголовку HTTP SOAPAction. В WCF для маршрутизации сообщений используется заголовок HTTP SOAPAction.

XML-код, в который тип сериализуется сериализатором XmlSerializer, по умолчанию семантически идентичен XML-коду, в который тип сериализуется сериализатором DataContractSerializer, при условии, что пространство имен для XML задано явным образом. При задании типа данных для использования в веб-службах ASP.NET , если в будущем планируется переход на WCF, поступайте следующим образом.

  • Задавайте тип с использованием классов .NET Framework, а не схемы XML.

  • Добавляйте в класс только атрибуты SerializableAttribute и XmlRootAttribute, используя последний для явного задания пространства имен для типа. Не добавляйте дополнительные атрибуты из пространства имен System.Xml.Serialization для задания способа преобразования класса .NET Framework в XML.

  • Используя этот подход, вы впоследствии сможете превратить классы .NET в контракты данных, добавив атрибуты DataContractAttribute и DataMemberAttribute, без значительного изменения XML-кода, в который классы сериализуются для передачи. Типы, используемые в сообщениях веб-службами ASP.NET, могут обрабатываться приложениями WCF как контракты данных, что, помимо прочих преимуществ, повышает производительность приложений WCF.

Избегайте использования параметров проверки подлинности, предусмотренных в IIS: клиенты WCF их не поддерживают. Если службу необходимо защитить, используйте параметры, предусмотренные в WCF: они надежны и основаны на стандартных протоколах.

Влияние загрузки модуля ServiceModel HttpModule на производительность

В платформе .NET Framework 3.0 модуль WCF HttpModule устанавливался в корневой файл Web.config таким образом, что любое приложение ASP.NET поддерживало WCF. Это может влиять на производительность, поэтому можно удалить ServiceModel из файла Web.config, как показано в следующем примере.

<httpModules>
    <remove name=”ServiceModel” />
<httpModules/>

См. также

Задачи

Как настраивать службы WCF для взаимодействия с клиентами веб-службы ASP.NET