Вопрос по wcf, c# – WCF - не удается разрешить символ [WebGet] - что я делаю не так?

22

Я работаю над проектом REST WCF, и когда я реализую следующий код, он жалуется, что не может разрешить класс WebGet? Что мне не хватает?

Я попытался импортировать пространство имен System.ServiceModel.Web, но он не может найти его, даже если я на него ссылался. & Quot; Сеть & quot; в System.ServiceModel.Web не регистрируется, когда я регистрирую его в операторе использования поверх моего кода.

В основном, что мне нужно для реализации таких концепций WCF REST, как WebGet, WebInvoke, UriTemplate и т. Д.?

UPDATE: После некоторой обратной связи и размышлений об этом, немного более того, что я сделал, кажется, что библиотеки DLL (System.ServiceModel & System.ServiceModel.Web) не отображаются через «Добавить ссылку». окно, когда я иду, чтобы добавить ссылку на проект. Когда я впервые запустил проект, к вашему сведению, поскольку эти сборки не появлялись вначале, я отправился на «поиск». для них, и скопировал их во временную папку, чтобы я мог ссылаться на них и, таким образом, я думаю, у меня возникли проблемы с разрешением. Итак, теперь, когда я нахожусь на этом этапе, как я могу заставить свою VS распознавать / регистрировать эти библиотеки WCF REST? Спасибо!

UPDATE: Я полагаю, что я в курсе всех событий: разработка на VS 2008 SP1 - я пытаюсь загрузить последние SP, скачал REST Preview 2 Starter Kit, разработал на 3.5 Framework, пытаясь создать слой WCF REST для конечного использования клиентом Silverlight 2.

Вот что у меня есть:

<code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using UtilityClasses;
using Microsoft.ServiceModel.Web;
using Microsoft.Http;

namespace WcfRestService
{
    [ServiceContract]
    public interface IRestService
    {
        [OperationContract(Name = "Add")]
        [WebGet(UriTemplate = "/")]   // ** can't compile here **
        int Add();
    }

}
</code>

Любой совет будет с благодарностью.

Это странная вещь - я сначала добавил обе ссылки в качестве ссылок на проекты. Затем я пошел к своему коду и сначала добавил оператор использования в System.ServiceModel, и он был распознан, но System.ServiceModel.Web не распознан. user118190
Очень странно, очень странно. & lt; - Да, я знаю, что это бесполезно ... Можете ли вы заархивировать и опубликовать исходный код, возможно, я смогу помочь разобраться с этой проблемой. alanquillin
Когда вы говорите, что ссылались на него в проекте, вы ссылались на System.ServiceModel или System.ServiceModel.Web? Они разные, и вам нужна ссылка на проект System.ServiceModel.Web alanquillin
Я попробовал это, но не пошел ... Я загрузил пример проекта из Интернета, который использует аналогичные атрибуты WebGet, и обнаружил, что System.ServiceModel.Web.dll находится здесь: C: \ WINDOWS \ assembly \ GAC_MSIL \ System .ServiceModel.Web \ 3.5.0.0__31bf3856ad364e35 \ System.ServiceModel.Web.dll, но когда я захожу в другой проект и пытаюсь добавить его, он не добавляется?!? Что дает? user118190
Вы пытались просто добавить использование для System.ServiceModel, а затем изменить свой декоратор, чтобы он выглядел как [Web.WebGet (UriTemplate = & quot; / & quot;)]? alanquillin

Ваш Ответ

7   ответов
9

Я сделал это:

Delete System.Service.Web from References Build Clean Project Add System.Service.Web to References Build

..и В.С. нашел это ??

Странно, но что-то пошло не так ... user118190
пожалуйста, прокрутите вниз до ответа @Hossam, это, вероятно, ваш реальный ответ.
26

вы можете ориентировать свой проект на .Net Client Profile, который предоставляет ограниченные пространства имен. вам может понадобиться проверить настройки целевого фреймворка в свойствах вашего проекта.

Я сталкивался с тем, что с WCF-проектом, который не находит System.ServiceModel.Web, пока я не изменил настройки фреймворка по умолчанию.

НТН

Это правильный ответ. Необходимо изменить параметры проекта, чтобы целью было «.NET Framework X», а не «.NET Framework X Client Profile». Затем вы можете добавить ссылку на ваш проект на вкладке .NET.
3
right click on the project name and choose Properties. change the target framework to .NET Framework 4. right click on the References and choose Add Reference. And then you can see System.ServiceModel.Web.

le, поэтому вы не можете найти System.ServiceModel.Web.

Этот вопрос был задан до .Net 4.0
8

свойствах проекта & quot; убедитесь, что ваша & quot; целевая структура & quot; устанавливается на .NET Framework 4

а не: .NET Framework 4 Client Profile или любая более низкая версия .NET.

Также, если возможно, используйте VS 2010.

--DBJ

Это тоже правильный ответ. Этот должен быть объединен с @Hossam.
2

Я добавил эту недостающую ссылку:

System.ServiceModel.Web

и эта строка кода:

using System.ServiceModel.Web;

и все решено! ;)

0

несмотря на это предупреждение в дизайнерском представлении класса обслуживания. Не очень большая проблема, но все же довольно раздражающая. Понял, что это просто игра ReSharper - он не обновил свой внутренний кеш, когда ссылка наSystem.ServiceModel был добавлен автоматически VS при добавлении новой службы WCF. Я отключил анализ кода в реальном времени в:

Tools -> Options -> Resharper Ultimate -> Options -> Code Inspection-> Settings -> Enable code analysis

Это восстановило встроенный анализ кода VS, и проблема была решена сразу.

Если вы предпочитаете продолжать использовать анализ кода ReSharper, очистите кэш в:

Tools -> Options -> Resharper Ultimate -> Options -> Environment -> General -> Clear Caches

может также разобраться в проблеме.

29

Щелкните правой кнопкой мыши на «Справки»; папку в вашем проекте и выберите «Добавить ссылку ...». Прокрутите страницу вниз до System.ServiceModel.Web и нажмите «ОК».

Попробуйте очистить свой проект, а затем строить. Также попробуйте перезапустить Visual Studio
+1 это помогло мне.
Хорошо, я чувствую, что что-то добираюсь ... Когда вы идете, чтобы добавить ссылку на проект и "Добавить ссылку". появляется окно, на вкладке .NET я не могу найти dll System.ServiceModel. *. Похоже, они у меня есть в моем GAC (GAC_MSIL), но я думаю, они «не зарегистрированы». правильно или что-то. Как я могу убедиться, что они правильно подходят в VS? user118190
Начните с нового проекта, добавьте ссылку на этот dll и убедитесь, что ваш оператор using работает. Если нет, то у вас есть другие проблемы.
Это то, что я сделал сначала, а затем я пошел к своему коду и сначала добавил оператор использования в System.ServiceModel, и это было распознано, но System.ServiceModel.Web не распознан. Странно, верно ?! user118190

Похожие вопросы