Возможно выставить КОНСТАНТЫ, определенные в веб-сервисе, для потребителя (обе стороны .Net) - PullRequest
2 голосов
/ 09 января 2009

У меня есть несколько констант, определенных для веб-службы, и я хотел бы сделать их доступными для потребителя. И сервер, и клиент .Net.

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

Итак, есть ли способ определения констант в веб-сервисе, чтобы они были доступны для клиента ??

Обновление (Kev): я хочу представить их клиенту через сам веб-сервис, а не через отдельную сборку. Обновление № 2 (Пейдж): Итак, если я вас понимаю, у меня будет новый объект List , содержащий константы, но как клиент использует это? Разве это не выглядит (примерно): dim константы как List = mywebservice.GetConstants () dim someresult как Integer = mywebservice.somefunction (constants (3)) Если я не пойму вас неправильно, это полностью отрицает смысл определения констант.

Ответы [ 5 ]

4 голосов
/ 05 марта 2010

Кажется, ответ будет ..... не может быть сделано.

0 голосов
/ 21 января 2009

На мой взгляд, реальная точка зрения веб-сервисов - это возможность извлекать данные или выполнять процессы на сервере независимым от LANGUAGE и MACHINE способом, используя xml или json или любой другой язык для представления данных. Когда вы вызываете службу для перечисления продуктов, вы просто хотите получить продукты, вы не хотите (или не должны) знать, вызываете ли вы хранимую процедуру SQL или бизнес-функцию C # на сервере. Поэтому я не думаю, что имеет смысл передавать «константы» с клиента на сервер, если у вас нет веб-метода, который перечисляет эти константы вам (опять же, только в текстовом виде). Я думаю, что весь стек .asmx веб-службы Microsoft просто отстой, потому что он опирается на метафору «удаленный вызов процедуры», а не на «службу» в концепции веб-службы.

Я согласен, что это субъективно: P

0 голосов
/ 09 января 2009

Вы можете записать «константы» в словарь, а затем иметь веб-метод, который возвращает ключи.

Или, используя ответ Кева выше:

Класс:

public class Win32Message   {
    public const int WM_ACTIVATE =0x0006;
    public const int WM_ACTIVATEAPP = 0x001C;
    public const int WM_AFXFIRST = 0x0360;
    public const int WM_AFXLAST = 0x037F;
    public const int WM_APP = 0x8000;
    public const int WM_ASKCBFORMATNAME        = 0x030C;
}

А затем в веб-сервисе используйте такой веб-метод, как:

[WebMethod]
public System.Collections.Generic.List<string> GetConstants(System.Type type)
{
    System.Collections.Generic.List<string> constants = new 
        System.Collections.Generic.List<string>();

    System.Reflection.FieldInfo[] fieldInfos = type.GetFields(
        System.Reflection.BindingFlags.Public | BindingFlags.Static |
        System.Reflection.BindingFlags.FlattenHierarchy);

    // Go through the list and only pick out the constants
    foreach (System.Reflection.FieldInfo fi in fieldInfos)
    if (fi.IsLiteral && !fi.IsInitOnly)
        constants.Add(fi.Name);

    return constants;
}

Я нашел это в Загадочный блог Уэса

Конечно, вы можете вернуть его в виде массива, массива или как захотите.

0 голосов
/ 10 января 2009

Я не знаю, есть ли способ разоблачить константы как таковые.

Но, возможно, вы могли бы просто реализовать некоторые функции, которые всегда возвращают одно и то же значение, и просто дать им специальное соглашение об именах? Например:

public int FLAG_READONLY()
{
   return 3;
}

Возможно, я неправильно понимаю вашу потребность.

0 голосов
/ 09 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...