Mam rozwiązanie usługi Windows i próbuję dodać odwołanie do usługi do usługi sieci Web Hermes (serwer komunikatów OpenSource ebms) w VS2010.
Mogę znaleźć usługę sieci Web za pomocą jej adresu URL, ale kiedy próbuję wypełnić odwołanie do usługi, otrzymuję następujące błędy w programie Visual Studio:
Error 8 Custom tool error: Failed to generate code for the service reference 'testService'. Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler
Niektóre dochodzenie zdawało się sugerować, że jest to spowodowane tym, że svcutil.exe nie mógł zbudować serwerów proxy z powodu braku uprawnień do katalogu (prawdopodobnie c: \ windows \ temp). Próbowałem przypisać różne uprawnienia dostępu, ale nie jestem pewien, który użytkownik potrzebuje pozwolenia, czy też jest to tylko czerwony śledź.
Wszelkie pomysły będą mile widziane.
Dzięki
źródło
Kliknij prawym przyciskiem myszy numer referencyjny usługi i wybierz
Configure Service Reference...
Następnie odznacz
Reuse types in referenced assemblies
Kliknij
OK
, wyczyść i odbuduj swoje rozwiązanie.źródło
Napotkałem również podobny błąd podczas próby wygenerowania klienta usługi sieciowej z projektu ASP .Net MVC 4.0 przy użyciu programu Visual Studio 2012.
Wydaje się, że źródłem problemu jest fakt, że projekt, z którego próbowałem wygenerować klienta, odwoływał się do zestawu, który z kolei był zależny od innego zestawu, do którego również nie odwoływał się.
Gdy w konfiguracji usługi włączona jest opcja „Ponowne użycie typów w przywoływanych zestawach”, generator usług prawdopodobnie sprawdza wszystkie przywoływane zestawy, aby uzyskać listę typów, które można ponownie wykorzystać. Fakt, że jeden z przywoływanych zestawów odwołuje się do innego zestawu, który nie jest dostępny, prawdopodobnie powoduje awarię generatora.
Usunięcie zaznaczenia opcji „Ponowne użycie typów w zestawach, do których istnieją odwołania” w konfiguracjach usług rozwiąże powyższy problem , ale ma on efekt uboczny. Opcja ponownego użycia typów jest nie bez powodu iw niektórych przypadkach pozwala uniknąć niepotrzebnego rzutowania w kodzie korzystającym z usługi.
Na przykład jeśli sama usługa jest zbudowana przy użyciu programu WCF, a niektóre parametry metod w niej zawarte są typu System.Guid, zostaną one przetłumaczone na ciągi w wygenerowanym kliencie, jeśli opcja ponownego użycia typów jest wyłączona.
Alternatywa, którą wolę wyłączać ponowne używanie typów, jest dodanie odwołania do usługi z projektu biblioteki klas specjalnie utworzonego w tym celu. Jedyną rzeczą, o której należy pamiętać, jest skopiowanie wszystkich konfiguracji związanych z usługą z pliku app.config biblioteki klas do pliku konfiguracyjnego projektu startowego.
Jeśli istnieją typy zdefiniowane w zestawach lokalnych, które muszą być ponownie użyte w kliencie usługi, wystarczy odwołać się do tych zestawów z wyżej wymienionego projektu biblioteki klas, wraz ze wszystkimi ich zależnościami.
źródło
http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647
Dzięki powyższemu artykułowi.
W moim przypadku mam ten problem z moim projektem WPF w VS.Net 2008. Po przejrzeniu tego artykułu zdałem sobie sprawę, że zestaw używany w usłudze sieciowej jest inną wersją zestawu używanego na kliencie.
Działa dobrze po zaktualizowaniu zestawu na kliencie.
źródło
Byłoby niezwykle trudno odgadnąć problem, ponieważ jest on spowodowany błędem w WSDL i bez zbadania WSDL nie mogę nic więcej skomentować. Więc jeśli możesz udostępnić swój WSDL, zrób to.
Wszystko, co mogę powiedzieć, to to, że wydaje się, że brakuje schematu w WSDL (z docelową przestrzenią nazw „http://service.ebms.edi.cecid.hku.hk/”). Wiem o problemach i różnych sposobach obsługi schematu, gdy instrukcje dołączania są ignorowane.
Generalnie uważam, że implementacja usług internetowych firmy Microsoft jest całkiem dobra, więc myślę, że usługa sieciowa odsyła podejrzane WSDL.
źródło
Otrzymuję ten sam błąd w Silverlight 5 (VS2012)
Możesz również usunąć odniesienia do:
Po zaktualizowaniu odniesień do usług pamiętaj, aby dodać je ponownie.
źródło
Jak wspomniano powyżej, możliwych jest kilka różnych problemów. Okazało się, że biblioteka .DLL dla biblioteki WCF została dodana jako odwołanie do projektu klienta. To z kolei powodowało problemy z rozwiązywaniem obiektów, a tym samym powodowało „opróżnianie” plików przez etapy generowania kodu. Odznaczenie opcji „Ponowne użycie typów ...” może wydawać się odpowiedzią, ale tworzy dodatkowe definicje typów obiektów, które są proxy do rzeczywistych typów, w nowej przestrzeni nazw, co powoduje różnego rodzaju problemy z „zgodnością” z stosowanie tych typów. Tylko jeśli naprawdę chcesz "ukryć" typ, powinieneś zaznaczyć tę opcję.
Ukrycie typu jest odpowiednie, jeśli nie chcesz, aby zależność typu „DLL” „przeciekała” do projektu, który chcesz oddzielić od innego. Jeśli biblioteka DLL projektu biblioteki WCF wkrada się do odwołań do projektu klienta, wystąpi ten problem z wszelkiego rodzaju dziwnymi efektami ubocznymi, ponieważ definicje typów znajdują się również w bibliotece DLL.
źródło
napotykają ten sam problem, rozwiązany przez uruchomienie programu Visual Studio w trybie administratora
źródło
Napotkałem ten problem podczas uaktualniania rozwiązania VS2010 WCF + Silverlight w VS2015 Professional . Oprócz automatycznej aktualizacji z Silverlight 4 do Silverlight 5, wartość pola wyboru ponownego wykorzystania referencji usługi została zmieniona i generowanie nie powiodło się.
źródło
„Ponowne użycie typów” nie zawsze stanowi problem, gdy występuje ten błąd.
Dodając odniesienie do starszej usługi, kliknij „zaawansowane” i tam „Dodaj odniesienie do sieci”. Teraz połącz się z Twoim wsdl i wszystko powinno działać.
źródło
Jeśli chcesz to poprawić bez odznaczania pola wyboru ponownego wykorzystania zespołu, to zadziałało:
źródło
Ponowne uruchomienie programu Visual Studio załatwiło sprawę. Używam VS 2015.
źródło
Miałem ten problem podczas próby zaktualizowania odwołania do usługi (błąd pojawia się tylko podczas dodawania odwołania do usługi), ale nie chciałem usuwać pola wyboru ponownego użycia zestawu.
U mnie zadziałało:
Voila, teraz faktycznie aktualizuje się i nie próbuje już usuwać całego wygenerowanego kodu.
Byłem prawie gotowy zrezygnować z funkcji ponownego wykorzystania typów ...
EDYCJA: Upewnij się również, że konfiguracja kompilacji to AnyCPU lub x86, ponieważ svcutil zawiera błędy z x64.
Do przeciwnika: przepraszam, jeśli to nie zadziałało dla ciebie, nawet nie wiem, dlaczego zadziałało dla mnie, ale zadziałało. Być może tym razem zrobiłem coś innego, co rozwiązało problem, ale teraz nie mogę się tego dowiedzieć.
źródło