Współdziałanie z usługami ASP.NET w sieci Web
Współdziałanie usług sieci Web ASP.NET i usług sieci Web programu Windows Communication Foundation (WCF) można osiągnąć, zapewniając, że usługi zaimplementowane przy użyciu obu technologii są zgodne ze specyfikacją WS-I Basic Profile 1.1. ASP.NET usługi sieci Web zgodne z profilem WS-I Basic Profile 1.1 są współdziałające z klientami WCF przy użyciu powiązania dostarczonego przez system WCF. BasicHttpBinding
Użyj opcji ASP.NET 2.0 dodawania WebService atrybutów i WebMethodAttribute do interfejsu, a nie do klasy, i pisania klasy w celu zaimplementowania interfejsu, jak pokazano w poniższym przykładowym kodzie.
[WebService]
public interface IEcho
{
[WebMethod]
string Echo(string input);
}
public class Service : IEcho
{
public string Echo(string input)
{
return input;
}
}
Użycie tej opcji jest preferowane, ponieważ interfejs z atrybutem WebService stanowi kontrakt dla operacji wykonywanych przez usługę, które mogą być ponownie używane z różnymi klasami, które mogą implementować ten sam kontrakt na różne sposoby.
Unikaj używania atrybutu SoapDocumentServiceAttribute , aby komunikaty kierowane do metod na podstawie w pełni kwalifikowanej nazwy elementu treści komunikatu SOAP, a nie nagłówka SOAPAction
HTTP. WCF używa nagłówka SOAPAction
HTTP do routingu komunikatów.
Kod XML, do którego XmlSerializer serializuje typ domyślnie, jest semantycznie identyczny z kodem XML, do którego DataContractSerializer serializuje typ, pod warunkiem że przestrzeń nazw xml jest jawnie zdefiniowana. Podczas definiowania typu danych do użycia z platformą ASP. Usługi NETWeb w oczekiwaniu na wdrożenie usługi WCF wykonaj następujące czynności:
Zdefiniuj typ przy użyciu klas programu .NET Framework, a nie schematu XML.
Dodaj tylko element SerializableAttribute i XmlRootAttribute do klasy, używając tej drugiej, aby jawnie zdefiniować przestrzeń nazw dla typu. Nie należy dodawać dodatkowych atrybutów z System.Xml.Serialization przestrzeni nazw, aby kontrolować sposób tłumaczenia klasy programu .NET Framework na język XML.
Przyjmując to podejście, powinno być możliwe późniejsze wprowadzenie klas platformy .NET do kontraktów danych z dodatkiem DataContractAttribute elementu i DataMemberAttribute bez istotnego zmieniania kodu XML, w którym klasy są serializowane do transmisji. Typy używane w komunikatach przez usługi sieci Web ASP.NET mogą być przetwarzane jako kontrakty danych przez aplikacje WCF, zapewniając między innymi lepszą wydajność w aplikacjach WCF.
Unikaj używania opcji uwierzytelniania udostępnianych przez usługi Internet Information Services (IIS). Klienci programu WCF nie obsługują ich. Jeśli usługa musi być zabezpieczona, użyj opcji udostępnianych przez usługę WCF, ponieważ te opcje są niezawodne i są oparte na standardowych protokołach.
Wpływ na wydajność spowodowany ładowaniem modułu HttpModule ServiceModel
W programie .NET Framework 3.0 WCF HttpModule
został zainstalowany w głównym pliku Web.config, tak aby każda aplikacja ASP.NET była włączona w programie WCF. Może to mieć wpływ na wydajność, więc można usunąć ServiceModel
plik Web.config, jak pokazano w poniższym przykładzie.
<httpModules>
<remove name="ServiceModel" />
</httpModules>