代码之家  ›  专栏  ›  技术社区  ›  flashnik

从autocompleteextender调用启用ajax的wcf应用程序

  •  1
  • flashnik  · 技术社区  · 16 年前

    我正在尝试使用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>
    

    所以,我有两个问题:

    1. 为什么在这种情况下autocomplete使用不同的动词来发送请求?
    2. 为什么在第二种情况下不起作用?

    我上传了一个 sample solution 再现问题。

    1 回复  |  直到 13 年前
        1
  •  3
  •   Darin Dimitrov    16 年前

    为什么它在第二个不起作用 案例?

    autocompleteextender使用ajax来获取数据。不允许跨域ajax请求。您的Web服务托管在 localhost:4227 您的web应用程序托管在 localhost:XXXX 在哪里? XXXX 不同于4227。

    更多信息 Same origin policy .

    推荐文章