WCF auto-hospedeiro para o cliente Ajax
-
22-09-2019 - |
Pergunta
Estou tentando se auto-hospedar um serviço WCF da WCF e fornecer um terminal HTTP com suporte para Ajax. Praticamente tudo o que encontrei sobre o WCF e o Ajax estão falando sobre o IIS, que eu não quero usar.
Construí um aplicativo de console simples para hospedar o serviço. Meu serviço tem apenas um único método:
[ServiceContract]
interface IMyService
{
[OperationContract]
string TestConnection();
}
E aqui está o código app.config:
<services>
<service name="Service.MyService" behaviorConfiguration="MyServiceBehavior" >
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior" contract="Service.IMyService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WebBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
Posso acessar o terminal de metadados do serviço e ver o WSDL, mas não consigo usá -lo no meu cliente Ajax. Então, minha pergunta é: 1. É possível fazer isso? 2. Qual é a configuração necessária que estou obviamente perdendo?
NOTA Não estou usando um arquivo .svc
Obrigado!
Solução
Qual é o seu cliente? Com o EnableWebScript, você está recebendo suporte ASP.NET AJAX (por exemplo, membros decorados, tipos e toda a gosma que implica). Se você deseja JSON "RAW", use o comportamento WebHTTP em vez de EnableWebScript e marque suas operações de interface com WebInvOKeattribute ou WebgetAttribute (definindo os tipos de solicitação/resposta para JSON ou XML como desejar). Também parece que você não atribuiu sua interface com o ServiceCoRtraTattribute, o que é necessário.