Что ж, ваша текущая проблема вызвана тем, что WebInvoke
, если вы не укажете параметр Method
, по умолчанию будет "POST". Ваш код jQuery отправляет запрос «GET», поэтому можно ожидать ошибку «метод не разрешен».
Тем не менее, ваш комментарий о том, что вы пытаетесь получить GET изначально и ничего не получаете взамен, заставляет меня склониться к вашей проблеме, заключающейся в нарушении политики того же происхождения с вашим браузером. Поскольку вы размещаете службу в форме Windows с адресом http://localhost:8766
, я предполагаю, что ваш веб-сайт не находится по адресу http://localhost:8766'. Согласно той же политике происхождения:
Термин «происхождение» определяется с использованием
доменное имя, прикладной уровень
протокол и (в большинстве браузеров) TCP
порт документа HTML, на котором выполняется
скрипт. Два ресурса считаются
быть того же происхождения, если и только
если все эти значения точно
то же самое.
Если вы возвращаете данные из своего сервиса в формате JSON, вы можете рассмотреть возможность использования запроса GET, который возвращает JSONP. Этот тип запроса не нарушает ту же политику происхождения, что и разрешенные удаленные сценарии. Ваш вызов jQuery будет выглядеть так:
$.ajax({
url: "http://localhost:8766/Test",
dataType: "jsonp",
processData: false,
type: "GET",
success: function (msg) {
console.log(msg);
}
});
Поскольку вы используете WebInvoke
, вы также можете использовать привязку WebHttpBinding
вместо BasicHttpBinding
. WebInvoke
не работает, если не используется с WebHttpBinding
. А когда вы используете WebHttpBinding
, вы можете настроить его так, чтобы он отвечал на запросы JSONP. Итак, ваш конфиг будет выглядеть так:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceConfig" name="MyServices">
<endpoint address="srv" binding="webHttpBinding" contract="Operations" bindingConfiguration="webHttpBindingWithJsonP" behaviorConfiguration="webHttpBehavior" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8766" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceConfig">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Вот очень хороший блог пост , который шаг за шагом проходит через это.
Надеюсь, это поможет!