Как получить intellisense для служб Ajax WCF? - PullRequest
3 голосов
/ 25 февраля 2009

Я наконец-то заставил Intellisense работать на JQuery, применив исправление KB958502 к Visual Studio 2008 и включив в него следующую строку:

/// <reference path="JQuery\jquery-1.3.2.js"/>

вверху моих файлов .js. Теперь я пытаюсь выяснить, как получить IntelliSense для JavaScript для клиентских прокси, сгенерированных элементами ScriptReference ScriptManager (как показано здесь):

    <asp:ScriptManager ID="ScriptManager1" runat="Server" EnablePartialRendering="false" AsyncPostBackTimeout="999999">
        <Services>
            <asp:ServiceReference path="../Services/DocLookups.svc" />
        </Services>
    </asp:ScriptManager>

Клиентские прокси работают - т.е. я могу звонить через них, но я не получаю Intellisense.

Мой сервис определен с помощью файла .svc:

<%@ ServiceHost Language="C#" Debug="true" Service="Documents.Services.DocLookups" CodeBehind="~/App_Code/DocLookups.cs" %>

Код файла выглядит так:

[ServiceContract(Namespace = "Documents.Services", Name = "DocLookups")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class DocLookups {
...

пример метода в этом классе:

    //Called at the begining of the page to fill in the category list
    [OperationContract]
    public SelectOption[] GetCategoriesForSelectList()
    {
        SelectOption[] Result;
        IDocumentRepository repository = new DocumentEntityRepository(ConnectionString);
        Result = (from cat in repository.GetDocCategories()
                  select new SelectOption(cat.Category_ID.ToString(), cat.CategoryName)).ToArray();
        if (Result.Length > 0)
            Result[0].Selected = true;  //Select first item 
        return Result;
    }

и использует контракт данных, определенный следующим образом:

namespace Documents.Services {

[DataContract]
public class SelectOption
{
    //A useful DTO to use when filling a <select> element with options
    public SelectOption(string optionValue, string optionText) {
        OptionValue = optionValue;
        OptionText = optionText;
        Selected = false;
    }
    public SelectOption(string optionValue, string optionText, bool selected) {
        OptionValue = optionValue;
        OptionText = optionText;
        Selected = selected;
    }

    [DataMember]
    public string OptionValue { get; set; }
    [DataMember]
    public string OptionText { get; set; }
    [DataMember]
    public bool Selected { get; set; }
}

} * * тысяча двадцать-один

В моих файлах javascript вызов этой службы выглядит так:

Documents.Services.DocLookups.GetCategoriesForSelectList(...

но я не получаю Intellisense (например, если я набираю Documents. Ничего не появляется). Я не получаю intellisense ни для сгенерированных методов, ни для типов [DataContract], используемых методами.

Я считаю, что я должен получить Intellisense для этих прокси и типов, но не могу понять, что я могу делать неправильно. ТИА.

Ответы [ 3 ]

4 голосов
/ 26 февраля 2009

ли /// <reference path="../Services/DocLookups.svc" /> не работает?

0 голосов
/ 16 апреля 2009

Я столкнулся с этой же проблемой и обнаружил, что есть исправление для Visual Studio 2008, которое решило мою проблему:

http://support.microsoft.com/kb/958502

0 голосов
/ 26 февраля 2009

Спасибо Скотту за указание, что мне нужно добавить

///<reference path... 

линия. Я не знаю, где это задокументировано, но я почему-то упустил, что это требовалось для сгенерированных WCF прокси на стороне клиента - хотя теперь это имеет смысл, если использовать ту же идиому, чтобы получить Intellisense для JQuery.

Кстати, строка, которую мне пришлось использовать, немного отличалась от предложенной Скоттом, учитывая структуру моих проектов. Я попробовал:

/// <reference path="../Documents/Services/DocLookups.svc" /> 

Затем я сохранил файл и в меню VS Edit выбрал Intellisense ... Обновить JScript Intellisense ...

К сожалению, это не сработало, и я получил следующую ошибку при обновлении Intellisense:

Error updating JScript IntelliSense: 
C:\TFSSource\LitigationPortal\Version 1.0\LitigationPortal\Documents\Services\DocLookups.svc:
'Type' is undefined @ 0:0

Так что я добился определенного прогресса, но я еще не совсем там.

...