我正在尝试使用wcf服务来完成ms-ajax自动完成编辑器完成列表。我试了两种选择。如果我在我的网站项目中添加了WCF服务,AutoCompleteExtender将其称为Through Post,它工作正常。
然后我决定创建一个单独的wcf应用程序,并将我的ajax支持的wcf服务添加到新的应用程序中。我还复制了
Web.config
关于我的网站
servicemodel
. 它不起作用!首先,autocomplete调用服务uing
GET
不是
POST
. 我变了
WebInvokeAttribute
和
WebGet
接受我的服务
得到
. 现在,服务向extender发送正确的响应(我使用fiddler看到了这一点),但是extender没有填充完成列表。
扩展程序定义如下(
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以这样的方式定义服务模型:
<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>
所以,我有两个问题:
-
为什么在这种情况下autocomplete使用不同的动词来发送请求?
-
为什么在第二种情况下不起作用?
我上传了一个
sample solution
再现问题。