2009-04-06 9 views

Odpowiedz

50

Najpierw musisz mieć jasność co do usługi. Masz na myśli pojedynczy punkt końcowy lub wiele punktów końcowych na tym samym hoście?

Zakładając, że masz na myśli pojedynczy punkt końcowy, a następnie tak, ale z niewielką ilością pracy. Punkt końcowy może zaimplementować tylko jeden interfejs; Więc co trzeba zrobić, to połączyć wszystkie interfejsy, które chcesz realizować w jednym interfejsie

public interface IMyInterface : IInterface1, IInterface2 

a następnie wdrożyć je wszystkie wewnątrz klasy implementacji. To, czego nie możesz zrobić, to mieć wiele interfejsów i wiele implementacji w magiczny sposób scalić w jeden punkt końcowy.

+0

Dzięki, właśnie o to pytałem. –

+0

Proste, sprytne! Doskonałe rozwiązanie. +1 ode mnie –

+0

Mam dwa interfejsy, czy muszę wykonać dwie usługi? czy mogę używać dwóch interfejsów, z których każdy ma punkt końcowy w tej samej usłudze? –

5

Z WCF można:

  • mieć jedną klasę wdrożenia usługi, która implementuje wiele interfejsów usług
  • mają jedną klasę realizacja usług odsłonięte przez wielu punktów końcowych, np jeden punkt końcowy usługi za pomocą BasicHttpBinding w celu uzyskania maksymalnej interoperacyjności i innego punktu końcowego przy użyciu funkcji NetTcPBinding w celu uzyskania maksymalnej wydajności (z klientami WCF).
3

Oto jak można odsłonić ten sam interfejs na dwóch różnych punktach końcowych w App.Config, jeśli o to pytasz.

<service name="Service1">  
    <endpoint address="http://localhost:8001/service1.asmx" binding="basicHttpBinding" contract="IService" /> 
</service> 
<service name="Service2">  
    <endpoint address="http://localhost:8002/service2.asmx" binding="basicHttpBinding" contract="IService" /> 
</service> 
3

Jeśli twoja klasa implementacji staje się zbyt duża (jak moja) spróbuj zaimplementować super-interfejs w częściowej klasie. Możesz umieścić jedną implementację interfejsu w jednym pliku. To tylko konwencja, ale może się przydać później.

21

Poniższa wygląda bliżej pierwotnego celu i nie może obejmować jedną dużą interfejs ...

wielu punktów końcowych w jednym ListenUri: http://msdn.microsoft.com/en-us/library/aa395210.aspx


Próbka powiązana powyżej wyjaśnia, że ​​jest to możliwe posiadanie wielu punktów końcowych zarejestrowanych pod tym samym adresem fizycznym (listenUri), z których każdy realizuje inny interfejs (kontrakt), np .:

<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.ICalculator" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:OtherEcho" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 

Jest to możliwe, ponieważ wiadomości przychodzące są kierowane do odpowiedniego punktu końcowego na podstawie kombinacji filtrów adresów i kontraktów.

+1

Właściwie przestałem czytać, gdy zobaczyłem dobrą odpowiedź, której mogłem użyć. Szkoda, że ​​nie widziałem twojej odpowiedzi na czas. +1, ponieważ jest to jeszcze lepsza odpowiedź, choć mogę myśleć o przypadkach odpowiadających zaakceptowanej odpowiedzi. –

+1

To znacznie lepsze rozwiązanie problemu, który napotkałem. Pozwoliło mi to mieć dwa oddzielne typy serializerów, które były wymagane dla mojego rozwiązania. –

Powiązane problemy