Я пытаюсь использовать службу WCF для выполнения списка завершения MS Ajax AutoCompleteExtender. Я попробовал две альтернативы. Если я добавляю сервис WCF в свой проект веб-сайта, AutoCompleteExtender вызывает его через POST, и он работает нормально.
Затем я решил создать отдельное приложение WCF и добавить свою службу WCF с поддержкой AJAX в новое приложение. Я также скопировал часть Web.config
моего сайта, касающуюся servicemodel
. И это не работает! Прежде всего, автозаполнение вызывает услугу GET
, а не POST
. Я изменил WebInvokeAttribute
и WebGet
моего сервиса, чтобы принять GET
. Теперь служба отправляет правильный ответ расширителю (я наблюдал это с помощью Fiddler), но расширитель не заполняет список завершения.
Расширитель определяется следующим образом (act
- это тег для AjaxControlToolkit):
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" autocomplete = "off"></asp:TextBox>
<act:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server"
DelimiterCharacters="" Enabled="True" ServiceMethod="GetNames"
ServicePath="http://localhost:4227/Service1.svc" TargetControlID="TextBox1">
</act:AutoCompleteExtender>
<asp:Button ID="Button1"
runat="server" Text="Button" />
</div>
<act:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</act:ToolkitScriptManager>
</form>
Служба WCF работает на порте 4227. Она работает в Visual Studio. В первом случае ServicePath равен Service1.svc
.
Web.Config определяет sevicemodel следующим образом:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<endpoint address="" behaviorConfiguration="WcfService1.Service1AspNetAjaxBehavior" binding="webHttpBinding" contract="WcfService1.Service1" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WcfService1.Service1AspNetAjaxBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="WcfService1.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Итак, у меня есть два вопроса:
- Почему в этом случае автозаполнение использует разные глаголы для отправки запроса?
- Почему это не работает во втором случае?
Я загрузил пример решения для воспроизведения проблемы.