2011-01-04 25 views
5

W usłudze WCF mam zestaw wiążący punkt końcowy jako wsHttpBinding. Jednak gdy używam programu Visual Studio do dodawania odwołania do usługi, moi klienci app.config pokazuje powiązanie jako basicHttpBinding. Czy ktoś wie, dlaczego tak się dzieje?wsHttpBinding zmiany na basicHttpBinding w aplikacji klienckiej app.config

Mój punkt końcowy w usłudze web.config (obsługiwany w IIS 7.5). Pobiera adres z baseAddresses

<endpoint address="" 
    binding="wsHttpBinding" 
    bindingConfiguration="wsHttpServiceBinding" 
    contract="MyProject.IMyService" /> 

app.config klienta:

<client> 
    <endpoint address="http://example.com/MyService.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyService" 
    contract="Service.MyService" name="BasicHttpBinding_MyService" /> 
</client> 
+3

Najprawdopodobniej twoja konfiguracja nie jest używana, a twój klient jest zbudowany z domyślnej konfiguracji. Sprawdź, czy nazwa w twoim elemencie usługi jest taka sama jak typ usługi w dyrektywie ServicHost (plik .svc), w tym obszary nazw. Możesz to również sprawdzić w WSDL. –

+0

Nie wspomniałem o tym w poście, ponieważ starałem się zachować prostotę, ale mam dwa wiązania, drugim jest net.tcp, który przechodzi bez żadnych problemów, stąd moje pomieszanie. – Cragly

Odpowiedz

7

- Ladislav Mrnka wskazał mi w dobrym kierunku z tym. Dziękuję bardzo.

Próbowałem zachować proste pytanie, ponieważ myślałem, że odpowiedź może być prosta. Powinienem jednak wytłumaczyć nieco więcej szczegółów, ponieważ jest to odpowiedź na mój problem.

Zamiast posiadania mojej umowy o świadczenie usług (IMyService) znajdującej się w mojej aplikacji usług WCF, miałem ją w innym projekcie Domain, gdzie zachowałem wszystkie moje interfejsy, aby mogły być ponownie wykorzystane w wielu różnych projektach. W mojej aplikacji usługi WCF .web.config nazwa usługi wskazywała na projekt interfejsu, a nie na jego implementację. To spowodowało, że VS2010 (svcutil.exe) utworzył proxy i konfigurację opartą na domyślnych ustawieniach (domyślnie rezyduję w pliku machine.config (dla WCF 4)).

Podsumowując, dla każdego, kto może natknąć się na ten problem, nazwa usługi wskazywała niewłaściwą lokalizację. Upewnij się, że nazwa usługi wskazuje na implementację (zazwyczaj w aplikacji usługi WCF - MyProject.MyService) i że punkt końcowy wskazuje kontrakt serwisowy (w aplikacji usługi WCF lub w projekcie zewnętrznym - MyProject.IMyService lub AnotherProject.Interfaces.IMyService).

Dzięki za pomoc.