Sfondo
ho creato i servizi web ASMX in passato e sono stato in grado di accedere al servizio dal browser web e Ajax richieste GET utilizzando la convenzione indirizzo: MyService.asmx/MyMethod?Param=xxx
Fare un WCF lavoro Web Service con GET richiede
Ho appena iniziato a utilizzare WCF e ho creato un nuovo servizio Web nel mio progetto ASP.NET. Crea un file con l'estensione .svc come MyService.svc.
situazione attuale
sono in grado di consumare il servizio utilizzando il WcfTestClient
che viene fornito con VS2008. Sono anche in grado di creare il mio client WCF aggiungendo un riferimento al servizio in un altro progetto o utilizzando la riga di comando svcutil.exe
per generare il proxy e il file di configurazione.
Il problema
Quando provo ad utilizzare il servizio da un browser utilizzando MyService.svc/MyMethod?MyParam=xxx
, ottengo una pagina vuota senza errori.
Quello che ho cercato
Ho già aggiunto una basicHttpBinding al web.config e ne ha fatto HttpGetEnabled nella configurazione comportamento. Ho anche aggiunto l'attributo [WebGet(UriTemplate = "MyMethod?MyParam={MyParam}")]
al mio contratto operativo.
Ho già seguito le informazioni contenute in questo altro problema di stack overflow:
REST/SOAP EndPoints for a WCF Service
Tuttavia, mi sia ottenere una pagina vuota o un errore HTTP 404 dopo aver seguito questi passaggi. Non c'è niente di speciale nel codice. Sto solo prendendo una stringa come parametro e restituendo "Hello xxx". Questa è una cosa tipo base "Hello WCF World" di tipo proof-of-concept.
AGGIORNAMENTO - Ecco il codice relativo
[ServiceContract]
public interface IMyService
{
[WebGet(UriTemplate = "MyMethod/MyParam={MyParam}")]
[OperationContract]
string MyMethod(string MyParam);
}
Web.Config - system.serviceModel Sezione
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint address=""
binding="wsHttpBinding" contract="IMyService" />
<endpoint address="MyService.svc"
binding="basicHttpBinding" contract="IMyService" />
<endpoint address="mex"
binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
Suppongo che tutto ciò di cui avevo bisogno era aggiungere l'endPointBehavior. Ha funzionato come un fascino. Grazie. – ichiban