Compartilhar via


Interoperabilidade com serviços Web do ASP.NET

A interoperabilidade entre serviços Web ASP.NET e serviços Web do WCF (Windows Communication Foundation) pode ser obtida garantindo que os serviços implementados usando ambas as tecnologias estejam em conformidade com a especificação WS-I Basic Profile 1.1. Os serviços Web do ASP.NET que estiverem em conformidade com o WS-I Basic Profile 1.1 serão interoperáveis com clientes WCF usando a associação predefinida do WCF fornecida pelo sistema, BasicHttpBinding.

Use a opção do ASP.NET 2.0 que permite adicionar os atributos WebService e WebMethodAttribute a uma interface, em vez de uma classe, e gravar uma classe para implementar a interface, conforme mostrado no seguinte exemplo de código:

[WebService]  
public interface IEcho  
{  
    [WebMethod]  
    string Echo(string input);  
}  
  
public class Service : IEcho  
{  
  
   public string Echo(string input)  
   {  
        return input;  
    }  
}  

O uso dessa opção é preferencial, pois a interface com o atributo WebService constitui um contrato das operações executadas pelo serviço que podem ser reutilizadas com várias classes, que, por sua vez, podem implementar o mesmo contrato de diferentes maneiras.

Evite usar o atributo SoapDocumentServiceAttribute para ter mensagens roteadas para métodos com base no nome totalmente qualificado do elemento body da mensagem SOAP em vez do cabeçalho HTTP SOAPAction. O WCF usa o cabeçalho HTTP SOAPAction para roteamento de mensagens.

O XML em que XmlSerializer serializa um tipo é, por padrão, semanticamente idêntico ao XML em que o DataContractSerializer serializa um tipo, desde que o namespace do XML seja explicitamente definido. Ao definir um tipo de dados para uso com os serviços Web do ASP.NET em antecipação à adoção do WCF, faça o seguinte:

  • Defina o tipo usando classes .NET Framework em vez de Esquema XML.

  • Adicione apenas o SerializableAttribute e o XmlRootAttribute à classe, usando o último para definir explicitamente o namespace para o tipo. Não adicione atributos adicionais do namespace System.Xml.Serialization para controlar como a classe .NET Framework deve ser convertida em XML.

  • Ao adotar essa abordagem, você deve ser capaz de posteriormente transformar as classes .NET em contratos de dados com a adição do DataContractAttribute e DataMemberAttribute sem alterar significativamente o XML no qual as classes são serializadas para transmissão. Os tipos usados em mensagens enviadas por serviços Web do ASP.NET podem ser processados como contratos de dados por aplicativos WCF, gerando, entre outros benefícios, melhor desempenho em aplicativos WCF.

Evite usar as opções de autenticação fornecidas pelo IIS (Serviços de Informações da Internet). Os clientes do WCF não dão suporte a eles. Se um serviço precisar ser protegido, use as opções fornecidas pelo WCF, pois essas opções são robustas e são baseadas em protocolos padrão.

Impacto no desempenho causado pelo carregamento do HttpModule do ServiceModel

No .NET Framework 3.0, o WCF HttpModule foi instalado no arquivo de Web.config raiz de modo que cada aplicativo ASP.NET estava habilitado para WCF. Isso pode afetar o desempenho, para que você possa remover ServiceModel para o arquivo Web.config, conforme mostrado no exemplo a seguir.

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

Confira também