Autocompleteexender не работает

#c# #asp.net #web-services #ajaxcontroltoolkit #autocompleteextender

#c# #asp.net #веб-сервисы #ajaxcontroltoolkit #autocompleteextender

Вопрос:

У меня есть этот сервис для расширения автозаполнения, который работает для ‘h’ для prefixText и 3 для count и возвращает ‘hi’ и ‘hello’ в массиве:

 [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public string[] GetWebUploadAutoCompleteData(string prefixText, int count)
    {
        try
        {
            DAL.DAL dal = new DAL.DAL();
            string[] returnValues = dal.GetWebUploadAutoCompleteData(prefixText, count);
            return returnValues;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
  

первые строки класса обслуживания:

 ...
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class BLL : System.Web.Services.WebService
{
...
  

и это пользовательский интерфейс:

 <asp:TextBox ID="txtTest" runat="server" Width="250px"></asp:TextBox>
                <cc1:AutoCompleteExtender ID="aceTest" runat="server" CompletionSetCount="3" DelimiterCharacters=";, :"
                    ServicePath="http://localhost:7051/UploadServices/BLL.asmx" MinimumPrefixLength="2" 
                    Enabled="true" ServiceMethod="GetWebUploadAutoCompleteData" TargetControlID="txtTest">
                </cc1:AutoCompleteExtender>
  

все правильно, но это не работает, пожалуйста, помогите.

Комментарии:

1. @user737453 ваш веб-сервис создан как отдельный проект или в том же проекте, что и веб-сайт

2. Веб-сервис и пользовательский интерфейс — это отдельные проекты.

3. @user737453 Я думаю, вам нужно add web reference обратиться к этому веб-сервису перед использованием в проекте веб-сайта…

Ответ №1:

Как вы сказали, ваш веб-сервис и пользовательский интерфейс являются отдельным проектом, поэтому вы не можете вызвать службу, которая находится в домене, отличном от страницы, на которой размещен ваш клиентский код. Это функция безопасности, предотвращающая перенаправление вредоносным кодом вашего безобидного javascript на что-то неприятное во всемирной паутине.

Решение

Для доступа к внешней веб-службе вы можете создать третий прокси веб-службы в вашем проекте пользовательского интерфейса. Третья служба может получить доступ к внешней веб-службе со стороны сервера, а вы можете получить доступ к этой внутренней веб-службе с клиента.

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо сомнения.

Редактировать

Если вы создали прокси-службу в своем проекте.Сделайте еще одну вещь, добавьте следующий код на страницу

 <asp:ScriptManager ID="ScriptManager1" runat="server">

            <Services>

                <asp:ServiceReference Path="AutoComplete.asmx" />

            </Services>

        </asp:ScriptManager>
  

Комментарии:

1. Я создал другую службу в той же папке, в которой находится вызывающая страница, я вызываю исходную службу с помощью этой службы, чтобы вернуть результаты. А также установите для servicepath autocompleteextender значение AutoComplete.asmx в пользовательском интерфейсе по-прежнему ничего не происходит. Кажется, что autocxomleteextender вообще не вызывает службу.

2. @mz: Похоже, что проблема в пути к сервису. Отладьте его в firebug, он предоставит вам точные сведения об ошибке.

3. Я отключил UrlRewriter в проекте, и теперь он работает с помощью прокси-класса. Спасибо.