Самостоятельное размещение WCF для клиента AJAX
-
22-09-2019 - |
Вопрос
Я пытаюсь самостоятельно разместить веб-службу WCF и предоставить конечную точку HTTP с поддержкой ajax.Практически все, что я нашел о WCF и AJAX, связано с IIS, который я не хочу использовать.
Я создал простое консольное приложение для размещения службы.В моем сервисе есть только один метод:
[ServiceContract]
interface IMyService
{
[OperationContract]
string TestConnection();
}
А вот код 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>
Я могу получить доступ к конечной точке метаданных службы и просмотреть WSDL, но не могу использовать его из своего ajax-клиента.Итак, мой вопрос:1.Можно ли сделать это?2.Какова необходимая конфигурация, которой мне явно не хватает?
ПРИМЕЧАНИЕ Я не использую файл .svc
Спасибо!
Решение
Какой у вас клиент?С помощью EnableWebScript вы получаете поддержку ASP.NET AJAX (например, декорированные члены, типы и все прочее, что из этого вытекает).Если вам нужен «необработанный» JSON, используйте поведение webHttp вместо EnableWebScript и пометьте операции интерфейса с помощью WebInvokeAttribute или WebGetAttribute (установив типы запроса/ответа на JSON или XML по вашему желанию).Также похоже, что вы не присвоили своему интерфейсу атрибут ServiceContractAttribute, который является обязательным.