2009-07-07 10 views
7

Mam bibliotekę klas (.NET) z odniesieniem do usługi sieciowej (w przypadku niektórych serwerów, a nie projektów w tym samym rozwiązaniu). Biblioteka klas ma klasę wystawioną na działanie COM. Ta klasa wywołuje usługę sieci Web.Biblioteka klas z odwołaniami do usług

Dodanie odwołania do usługi powoduje dodanie kodu do pliku app.config biblioteki klas.

Mam również aplikację komputerową w tym samym rozwiązaniu, tylko do celów testowych. Po uruchomieniu tej aplikacji generuje ten wyjątek:

Nie można znaleźć domyślnego elementu punktu końcowego, który odwołuje się do umowy "ServiceProxy.EventsServices" w sekcji konfiguracji klienta ServiceModel. Przyczyną może być brak pliku konfiguracyjnego dla aplikacji lub brak elementu punktu końcowego pasującego do tej umowy w elemencie klienta.

Ten wyjątek można rozwiązać, kopiując i wklejając wygenerowany kod dla odwołania do usługi w pliku app.config biblioteki klas do pliku konfiguracyjnego aplikacji pulpitu.

Po wdrożeniu muszę wdrożyć tylko bibliotekę DLL (zbudowaną z biblioteki klas), a nie aplikację komputerową. Muszę dołączyć odwołanie do usługi w pliku konfiguracyjnym, który może być odczytany przez bibliotekę DLL.

Wszelkie sugestie?

Dzięki!

+1

Jedynym sposobem wykonania tej czynności jest skopiowanie z biblioteki klas app.config do pliku konfiguracyjnego aplikacji. To jest duplikat wielu innych pytań tutaj. –

+0

Na przykład: http://stackoverflow.com/questions/502919/how-to-configure-wcf-in-a-seperate-dll-project –

Odpowiedz

6

Po dodaniu odwołania do usługi program Visual Studio generuje serwer proxy, który odczytuje plik app.config dla adresu URL usługi.

Masz opcję podawania statycznego adresu URL, który nie używa pliku konfiguracyjnego.

Jeśli chcesz się skomplikować i podać dynamiczny adres URL bez ustawień app.config, możesz skopiować wygenerowany kod i zmodyfikować go, aby użyć innego rodzaju źródła danych konfiguracyjnych (na przykład parametrów) i sposób można wdrożyć tylko bibliotekę dll.

Wygenerowany kod jest ukryty w kodzie źródłowym odwołania do usługi. Aby zobaczyć kod, musisz aktywować opcję "pokaż wszystkie pliki" dla eksploratora rozwiązań i odszukaj plik Refecence.cs (lub .vb) w pliku Reference.map.

Tego kodu nie należy modyfikować bezpośrednio, zamiast tego skopiuj kod, a następnie utwórz nową klasę w strukturze. (i usuń oryginalną referencję)

Zwróć uwagę, że jeśli modyfikujesz usługę (lub Wsdl), musisz ręcznie zmodyfikować klasę.

+0

Co ma odniesienie.cs z jego pytaniem i dlaczego mówisz o modyfikacji? Myślę, że powinieneś edytować swoje pytanie, aby usunąć tę część. –

+0

Ponieważ bloparod nie chce używać konfiguracji, to wystawia ją na COM. Musi zmodyfikować zależność proxy od konfiguracji. –

+0

Ale nic z tego nie znajduje się w pliku reference.cs. –

2

Wszystkie funkcje interfejsu API .NET pobierają konfigurację z pliku konfiguracyjnego aplikacji. Nie ma czegoś takiego jak plik konfiguracyjny DLL - plik app.config, który widzisz w bibliotece klas, pokazuje tylko to, co musisz skopiować.

Teraz, jeśli można wdrożyć tylko zespół, wtedy zespół będzie musiał skonfigurować się w kodzie.

2

Dziękuję za szybkie odpowiedzi =). Biorę je pod uwagę.

Właśnie zmieniłem z Service Reference na Web Reference.To eliminuje potrzebę posiadania informacji o konfiguracji w kliencie (w moim przypadku jest to aplikacja komputerowa Delphi), i naprawdę, nie mam pojęcia jak to zrobić = P.

Zamiast tego odwołanie serwisowe generuje odniesienie do biblioteki klas. Jak mówi David, jest on używany przez serwer proxy i nie można go zmienić z pliku konfiguracyjnego, ponieważ biblioteka DLL go nie ma (jak mówi John).

Do tej pory moim rozwiązaniem będzie korzystanie z Web Reference. Domyślam się, że będę musiał zakodować jakiś mechanizm, aby mógł być konfigurowalny z pliku.

Jeszcze raz, dzięki wam obojgu!