Czy pojedyncza usługa WCF oferuje wiele interfejsów, a jeśli tak, to w jaki sposób można to wyrazić w app.config
?Wiele interfejsów z pojedynczej usługi WCF?
Mam na myśli jedną usługę oferującą kilka interfejsów na jednym punkcie końcowym.
Czy pojedyncza usługa WCF oferuje wiele interfejsów, a jeśli tak, to w jaki sposób można to wyrazić w app.config
?Wiele interfejsów z pojedynczej usługi WCF?
Mam na myśli jedną usługę oferującą kilka interfejsów na jednym punkcie końcowym.
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.
Z WCF można:
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>
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.
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.
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. –
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. –
Dzięki, właśnie o to pytałem. –
Proste, sprytne! Doskonałe rozwiązanie. +1 ode mnie –
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? –