Zbudowałem aplikację internetową zawierającą umowę serwisową WCF i kontrolkę Silverlight, która wykonuje połączenia z tą usługą WCF. Na moich serwerach programistycznych i testowych działa świetnie.
Po wdrożeniu na naszym serwerze na żywo i uruchomieniu aplikacji otrzymuję wyjątek typu, System.ServiceModel.ServiceActivationException
który stwierdza, że usługa nie może zostać aktywowana z powodu wyjątku podczas kompilacji. Wyjątkiem jest:
Ta kolekcja zawiera już adres ze schematem http. W tej kolekcji może znajdować się maksymalnie jeden adres na schemat.
Przeczytałem, że ten wyjątek może zostać zgłoszony, jeśli strona internetowa ma więcej niż jeden nagłówek hosta, co jest prawdą na naszym serwerze na żywo. Najwyraźniej usługi WCF hostowane w IIS mogą mieć tylko jeden adres podstawowy. Jak mogę obejść ten problem?
Podsumowanie,
Rozwiązanie kodu: tutaj
Rozwiązania konfiguracyjne: tutaj
Z pomocą Mike'a Chaliy znalazłem rozwiązania, jak to zrobić za pomocą kodu. Ponieważ problem ten wpłynie prawie na wszystkie projekty, które wdrażamy w środowisku na żywo, wyróżniłem się rozwiązaniem czysto konfiguracyjnym. W końcu znalazłem taki, który szczegółowo opisuje, jak to zrobić w .net 3.0 i .net 3.5.
Poniżej znajduje się przykład zmiany konfiguracji internetowej aplikacji:
Rozwiązanie Dns (niesprawdzone): Myślę, że jeśli utworzyłeś nowy wpis dns specyficzny dla twojej aplikacji sieciowej, dodałeś nową stronę internetową i podałeś mu jeden nagłówek hosta pasujący do wpisu dns, to byś złagodził ten problem i nie zrobiłby tego muszę napisać niestandardowy kod lub dodać prefiksy do pliku web.config.
źródło
Widziałeś to - http://kb.discountasp.net/KB/a799/error-accessing-wcf-service-this-collection-already.aspx
źródło
W moim przypadku główną przyczyną tego problemu było wiele powiązań HTTP zdefiniowanych w nadrzędnej stronie internetowej, tj. InetMgr-> Sites-> Mysite-> properties-> EditBindings. Usunąłem jedno wiązanie http, które nie było wymagane i problem został rozwiązany.
źródło
W moim przypadku było to proste: użyłem kreatora „Dodaj usługę WCF” w Visual Studio, który automatycznie utworzył odpowiednie sekcje w app.config. Następnie zacząłem czytać: Jak hostować usługę WCF w aplikacji zarządzanej . Problem polegał na tym: nie musiałem podawać adresu URL, aby uruchomić usługę internetową.
Zastąpić:
Z:
Błąd zniknął.
Ogólny pomysł: jeśli podasz adres podstawowy jako parametr i określisz go w config, pojawi się ten błąd. Najprawdopodobniej nie jest to jedyny sposób na uzyskanie błędu.
źródło
Miałem ten problem, a przyczyna była raczej głupia. Próbowałem wypróbować wersję demonstracyjną Microsoftu dotyczącą uruchamiania ServiceHost z / w wierszu polecenia. Postępowałem zgodnie z instrukcjami, w tym tam, gdzie jest napisane, aby dodać odpowiednią usługę (i interfejs). Ale dostałem powyższy błąd.
Okazuje się, gdy dodałem klasę usług, VS automatycznie dodał konfigurację do app.config. Demo również próbowało dodać te informacje. Ponieważ było już w konfiguracji, usunąłem część demo i zadziałało.
źródło
Wystąpił ten sam błąd na starym serwerze Exchange 2010. Usługa (usługa replikacji skrzynki pocztowej Exchange) podawała powyższy błąd i proces migracji nie mógł być kontynuowany. Przeszukując Internet, znalazłem ten link, który stwierdził poniżej:
Exchange GRE nie otwiera się, gdy jest instalowany po raz pierwszy lub w przypadku wprowadzenia jakichkolwiek zmian na serwerze IIS. Błąd kończy się błędem przystawki, a przy próbie otwarcia strony przystawki wyświetlana jest następująca treść:
Przyczyna : Ten błąd występuje, ponieważ numer portu HTTP 443 jest już używany przez inną aplikację, a serwer IIS nie jest skonfigurowany do obsługi wielokrotnego wiązania z tym samym portem.
Rozwiązanie : Skonfiguruj serwer IIS do obsługi wielu powiązań portów. Skontaktuj się ze sprzedawcą (Microsoft), aby go skonfigurować.
Ponieważ usługi te były oferowane z serwera sieci Web IIS, sprawdzenie powiązań w witrynie głównej rozwiązało problem. Ktoś pomieszał powiązania witryny, definiując zasady, które się nakładały, i pomieszał usługi.
Naprawienie prawidłowych powiązań rozwiązało problem w moim przypadku i nie musiałem konfigurować Web.Config.
źródło