2011-09-20 13 views
15

Pomyślnie skonfigurowałem 3 punkty końcowe dla mojej prototypowej usługi. Punkty końcowe to basicHttpBinding, wsHttpBinding i webHttpBinding. Jedyny błąd jaki mam w tej chwili jest w WCFTestClient. Kiedy wskażę to mojej usłudze, wylistuję pierwsze dwa, ale nie webHttpBinding. Mogę przetestować punkt końcowy REST za pomocą przeglądarki i działa dobrze. Oto mój config:Usługa REST WCF nie jest widoczna w WCFTestClient

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="serviceBehaviour" name="VMDServices.VMDService"> 
     <endpoint binding="webHttpBinding" 
        address="rest" behaviorConfiguration="webBehaviour" contract="VMDServices.IService1"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint binding="basicHttpBinding" 
        address="basic" bindingConfiguration="basicBinding" contract="VMDServices.IService1"> 
     </endpoint> 
     <endpoint binding="wsHttpBinding" 
        address="ws" bindingConfiguration="wsBinding" contract="VMDServices.IService1"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 

    <bindings> 
     <basicHttpBinding> 
     <binding name="basicBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <security mode="None"></security> 
      <readerQuotas maxStringContentLength="2147483647"/> 
     </binding> 
     </basicHttpBinding> 
     <wsHttpBinding> 
     <binding name="wsBinding" transactionFlow="true"> 
      <security mode="None"></security> 
      <reliableSession enabled="true" ordered="true" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webBehaviour"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"> 
    </serviceHostingEnvironment> 
    </system.serviceModel> 

Czy istnieje jakikolwiek powód, dlaczego nie mogę zobaczyć webHttpEndpoint w narzędziu WCFTestClient?

Pozdrawiam, Dany.

+1

WCF test klienta jest dla ** ** SOAP usług opartych - cokolwiek ** ** 'webHttpBinding' BUT .... –

Odpowiedz

20

Dzieje się tak, ponieważ punkty końcowe w sieci (w przeciwieństwie do SOAP) nie eksponują metadanych, więc klient testowy nie wie o tym podczas pobierania WSDL dla usługi. W przeciwieństwie do SOAP, który ma dobrze zdefiniowane formaty eksponowania metadanych (WSDL, MEX), punkty końcowe web (a.k.a. REST) ​​tego nie robią.

To jest krótka historia. Jeśli chcesz poznać więcej szczegółów, napisałem na blogu o tym w http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-a-k-a-rest-endpoint-does-not-work.aspx

+0

To moje pierwsze myśli ... potem znalazłem to http: //knowledgebaseworld.blogspot.com/2010/06/wcf-service-with-webhttpbinding.html - ten gość w jakiś sposób umieścił go na swoim WCFTestClient – codedog

+0

Ten punkt końcowy właściwie nie może być użyty do wywołania z JSON (lub zwykłym XML) : nie ma na nim zachowania ''. Próbowałem też dokładnie tego samego scenariusza co on, a kiedy przeglądałem stronę WSDL, widziałem tylko dwa elementy '' (jeden dla podstawowego, jeden dla ws), brak dla punktu końcowego 'webHttpBinding'. – carlosfigueira

+0

Yup - nie miał na nim zachowania webHttp, co jest czymś, co mam w swoim, ponieważ potrzebuję go do interakcji z wywołaniami jQuery.Ajax(). – codedog

-1

spróbuj dodać „mexHttpBinding” punkt końcowy, który udostępnia metadane

+0

To nie zadziała - punkty końcowe webHttpBinding nie są widoczne w metadanych usługi. – carlosfigueira

1

Poniżej znajduje się lista funkcji nie obsługiwanych przez WCF test Klienta:

• rodzaje: Stream, wiadomości, XmlElement, XmlAttribute, XMLNode, typy, które implementują IXmlSerializableinterface, w tym powiązanego atrybutu XmlSchemaProviderAttribute i typów XDocument i Xelement i ADO.NET typu DataTable.

• Umowa dwustronna.

• Transakcja.

• Bezpieczeństwo: CardSpace, certyfikat oraz nazwa użytkownika/hasło.

• Wiązania: WSFederationbinding, wszelkie powiązania kontekstowe i wiązanie Https, WebHttpbinding (obsługa wiadomości odpowiedzi Json).

Źródło: http://msdn.microsoft.com/en-us/library/bb552364.aspx