Utworzyłem projekt biblioteki usług WCF w moim rozwiązaniu i mam odwołania do usług do tego. Korzystam z usług z biblioteki klas, więc oprócz biblioteki klas mam odwołania z mojego projektu aplikacji WPF. Usługi są konfigurowane prosto do przodu - zmieniane tylko w celu uzyskania funkcji usługi asynchronicznej.
Wszystko działało dobrze - dopóki nie chciałem zaktualizować referencji usług. Nie udało się, więc w końcu wycofałem się i spróbowałem, ale nawet wtedy się nie udało! A więc - aktualizacja odwołań do usług kończy się niepowodzeniem bez wprowadzania jakichkolwiek zmian. Czemu?!
Błąd jaki otrzymuję to ten:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
Ostrzeżenie zawiera więcej informacji:
Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the
following types. Only matching types can be valid references:
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
Istnieją również dwa podobne ostrzeżenia:
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://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']
I to samo dla:
Custom tool warning: Cannot import wsdl:port ..
Uważam, że to wszystko jest mylące ... Nie mam klasy pacjenta na pulpicie nawigacyjnym po stronie klienta, z wyjątkiem tej, którą otrzymałem za pośrednictwem numeru referencyjnego usługi. Więc co to znaczy? I dlaczego nagle się pojawia? Pamiętaj: ja nawet niczego nie zmieniłem!
Teraz rozwiązanie to zostało znalezione tutaj , ale bez wyjaśnienia, co to oznacza. Więc; w „Konfiguruj odwołanie do usługi” dla usługi odznaczam pole wyboru „Ponownie używaj typów w przywoływanych zestawach”. Przebudowa teraz wszystko działa dobrze bez problemów. Ale co tak naprawdę zmieniłem? Czy będzie to miało wpływ na moją aplikację? A kiedy należy to odznaczyć? Chcę ponownie użyć typów, dla których skonfigurowałem DataContract, ale nie więcej. Czy nadal będę mieć dostęp do tych bez zaznaczenia tego?
źródło
Odpowiedzi:
Po dodaniu odwołania do usługi istnieją dwa sposoby obsługi typów używanych przez usługę:
Jest wiele rzeczy, które mogą się nie udać. Odkryliśmy, że jeśli narzędzie ulegnie awarii, czasami szybciej można usunąć odwołanie do usługi i zacząć od nowa.
Przestaliśmy używać odniesienia do usługi. W przypadku projektów, w których mamy kontrolę nad klientem i usługą, używamy metody opisanej w tym screencastie .
źródło
Znalazłem swoją odpowiedź tutaj: http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html
Krótko mówiąc: odznaczyłem opcję Ponowne użycie typów w zespołach referencyjnych z menu Zaawansowane .
Nie wiem, czy to ma znaczenie, ale nie używam MVC, ale formularzy sieci Web.
źródło
Miałem też ten problem dzisiaj. Znalezienie błędu zajęło mi cały dzień. Mam nadzieję, że to pomoże.
Moja klasa, której nie udało się zaimportować, ma właściwość typu cutom enum. Ta właściwość jest oznaczona jako DataMember, a Enum jest również oznaczona jako DataContract. Jak dotąd wszystko w porządku. Po prostu zapomniałem oznaczyć każdego członka wyliczenia jako EnumMember.
Więc się zmieniłem
[DataContract] public enum SortMethodType { Default = 0, Popularity = 1, ReleaseDate = 2, PublishedDate = 3, TranslatedTitle = 4, OriginalTitle = 5, UserRating = 6, Duration = 7 }
Do tego:
[DataContract] public enum SortMethodType { [EnumMember] Default = 0, [EnumMember] Popularity = 1, [EnumMember] ReleaseDate = 2, [EnumMember] PublishedDate = 3, [EnumMember] TranslatedTitle = 4, [EnumMember] OriginalTitle = 5, [EnumMember] UserRating = 6, [EnumMember] Duration = 7 }
I w końcu zadziałało!
źródło
Idź do Właściwości zaawansowane podczas dodawania odwołania i usuń "System.Window.Browser" z listy kontrolnej. To rozwiązuje problem.
źródło
to może zabrzmieć dziwnie, ale naprawiłem to, usuwając odwołania, a następnie zamykając program Visual Studio i otwierając go ponownie, a na koniec ponownie dodając odwołania.
Myślę, że trzeba było ponownie uruchomić narzędzie niestandardowe, czy coś.
źródło
Ciągle napotykam ten błąd, gdy działa na innym komputerze dewelopera. Mimo że jestem pełnoprawnym administratorem na całej mojej maszynie wirtualnej, próbowałem zamknąć program Visual Studio i ponownie otworzyć za pomocą opcji „Uruchom jako administrator” i magicznie zadziałało.
Powodzenia.
źródło
Otrzymałem ostrzeżenie po uaktualnieniu mojego rozwiązania z programu Visual Studio (VS) 2010 do 2013 i zmianie programu .NET Framework każdego projektu z 4 na 4.5.1. Zamknąłem VS i ponownie otworzyłem, a ostrzeżenia zniknęły.
źródło
Jedną z wad wyłączenia „ponownego użycia typów w zestawach, do których istnieją odwołania” jest to, że może to powodować problemy z niejednoznacznymi odwołaniami. Jest to spowodowane tym, że odwołanie do usługi ponownie tworzy te obiekty w pliku .cs odniesienia, a kod implementujący usługę może odwoływać się do nich z oryginalnej przestrzeni nazw.
Gdy wystąpi taki scenariusz, uważam za przydatne sprawdzenie `` ponownego użycia typów w określonych zestawach, do których istnieją odniesienia '', co pozwala mi wybrać tylko te z niejednoznacznymi odwołaniami, co szybko rozwiązuje problem w ten sposób.
Mam nadzieję, że pomoże to komuś innemu.
źródło
Moje interfejsy usługi WCF znajdują się w zestawie, implementacja znajduje się w innym, a odwołanie do usługi znajduje się w jeszcze innym zestawie, niezależnie od klientów odwołania do usługi. Otrzymałem komunikat o błędzie zaraz po zastosowaniu DataContract do wyliczenia. Po zastosowaniu EnumMember do pól wyliczenia problem został rozwiązany.
źródło
Jeśli masz wątpliwości, że Twoja usługa nie ma żadnych problemów (takich jak problemy z wyliczeniami lub klasami, których nie można serializować, o czym wspominali inni), spróbuj utworzyć nowy projekt z nowym odwołaniem.
Używam Silverlight 5 i kilka razy próbowałem usunąć i odtworzyć odniesienie.
reference.cs
Plik po prostu wymyślił całkowicie opróżnić za każdym razem i to było dosłownie lat, odkąd go stworzył więc próbuje dowiedzieć się, co się zmieniło w służbie było wykluczone.Zauważyłem, że błąd zawierał odniesienia do wersji 2.0.5.0. Teraz nawet nie wiem, czy jest to rzeczywiście istotne dla wersji Silverlight, ale przypomniało mi się o stworzeniu zupełnie nowego projektu i nagle wszystko zadziałało.
źródło
Przeglądałem swój projekt i miałem ten sam problem. Okazało się, że są to różne wersje tej samej biblioteki DLL w witrynie WCF i w witrynie sieci Web. Witryna sieci Web zawiera nowszą wersję biblioteki DLL, a usługa odwołuje się do starszej wersji biblioteki DLL. Gdy wszystkie były zsynchronizowane, wszystko działało dobrze.
źródło
Doświadczyłem tego samego błędu. Przez prawie dzień walczyłem, próbując dowiedzieć się, co się dzieje. Wskazówką dla mnie były ostrzeżenia, które rzucał VS. Próbowałem wykonać jakieś mapowanie do Yahoo.Yui.Compressor.dll, biblioteki, którą dodałem i usunąłem (ponieważ zdecydowałem się jej nie używać) kilka dni wcześniej. To było szokujące, ponieważ biblioteki tam nie było, ale w jakiś sposób próbowała się do niej odwołać.
Na koniec przywracam ten plik dll z kosza, a następnie mogę pomyślnie zaktualizować odwołanie do usługi.
źródło
Dla każdego tutaj w przyszłości miałem ten sam błąd, ale spowodowany problemami z wersją na dwa różne sposoby.
Mam dwie usługi WCF i dwie aplikacje klienckie, które komunikują się za pośrednictwem odwołań do usług. Zaktualizowałem pakiet NuGet po obu stronach i próbowałem zaktualizować odwołanie do usługi i otrzymałem ten błąd.
Usuwanie nie pomogło. Odznaczenie opcji „ponowne wykorzystanie zespołów” nie jest pożądane, ponieważ muszę ich użyć ponownie - o to chodzi.
W końcu pojawiły się dwie odrębne kwestie:
1) Pierwszy problem, jak sądzę, dotyczył buforowania w Visual Studio. Skrupulatnie przejrzałem wszystkie odniesienia i nie znalazłem żadnych problemów, ale nadal zgłaszałem, że nie mogę znaleźć poprzedniej wersji pliku. Odinstalowałem wszystkie pakiety NuGet, ponownie uruchomiłem program Visual Studio i ponownie je zainstalowałem. Aktualizacja odniesienia do usługi zadziałała.
2) Drugi problem był spowodowany problemem zależności. Zaktualizowałem pakiet NuGet po obu stronach i wszystko wyglądało na poprawne, ale nieoznakowana zależność była niezsynchronizowana. Przykład:
Pakiet Foo v1 odwołuje się do Bar v1. Możliwe jest niezależne zaktualizowanie Foo i Bar do v2 bez aktualizowania odniesienia. Jeśli zainstalujesz zarówno Foo, jak i Bar v2, narzędzie serwisowe przeskanuje Foo v2, zobacz odniesienie do Bar v1 i zakończy się niepowodzeniem, ponieważ nie może znaleźć starszej wersji. Jest to zgłaszane poprawnie tylko wtedy, gdy zaktualizujesz numery wersji swojej biblioteki dll dla każdego pakietu. Visual Studio i MSBuild nie będą miały problemu z budowaniem aplikacji, ale odwołanie do usługi będzie miało straszny czas, próbując rozwiązać wszystko.
Mam nadzieję, że to komuś pomoże.
źródło