从调用的AutoCompleteExtender启用Ajax的WCF应用(Calling an Aj

2019-10-19 06:08发布

我试图用一个WCF服务,以满足MS阿贾克斯AutoCompleteExtender完成列表。 我尝试了两种备选方案。 如果我在我的网站项目中添加一个WCF服务,AutoCompleteExtender称之为thriugh POST和正常工作。

然后,我决定做一个独立的WCF应用程序并添加我的支持AJAX的WCF服务,以新的应用程序。 我也复制的一部分Web.config我有关的网站servicemodel 。 而且这是行不通的! 首先,自动完成调用一个服务uing GET ,不POST 。 我改变WebInvokeAttributeWebGet我的服务的接受GET 。 现在,该服务发送到扩展正确的响应(我看着这个使用招),但增量不填写完成列表。

扩展器的定义如下( 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>

所以,我有两个auestions:

  1. 为什么在这种情况下,自动完成使用不同的动词来发送一个请求?
  2. 为什么它不会在第二种情况下工作吗?

我上传了样品溶液来重现问题。

Answer 1:

为什么它不会在第二种情况下工作吗?

AutoCompleteExtender使用AJAX来获取数据。 跨域AJAX请求是不允许的。 Web服务托管在localhost:4227和Web应用程序托管在localhost:XXXX ,其中XXXX比4227有所不同。

关于更多信息同源策略 。



文章来源: Calling an Ajax-enabled WCF Application from AutoCompleteExtender