#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 в проекте, и теперь он работает с помощью прокси-класса. Спасибо.