Публичное свойство отсутствует в WSDL, обслуживаемом IIS 6 - PullRequest
0 голосов
/ 12 февраля 2010

Это очень странно, и мне просто интересно, может ли кто-нибудь объяснить это мне. У меня есть веб-сервис, управляемый традиционными старыми веб-сервисами в стиле asmx. У нас было общедоступное свойство, которое использовалось во внутреннем методе, который не отображался для таких потребителей:

public class User {
   public string EmployeeID;

   protected override void DoSomething(){
      var foo = EmployeeId;
   }
}

Теперь вот странная часть. Мы решили избавиться от этого поля. Но поскольку клиенты Apache Axis привязаны к определенному wsdl, мы не хотели удалять его из wsdl. Таким образом, мы оставили свойство, но удалили его использование во внутренних методах. Когда мы сделали это, свойство внезапно пропало из WSDL ... но ТОЛЬКО на серверах под управлением IIS6. Разработчики, работающие под управлением IIS 5.1, по-прежнему получают это свойство.

Мы закончили тем, что вернули тривиальное использование в методы (получили и установили его в пустую строку.), И внезапно он снова появился на серверах IIS6.

Что с этим?

Ответы [ 4 ]

3 голосов
/ 15 февраля 2010

Звучит немного похоже на эта проблема у меня была .

Свойство не было в wsdl, поскольку у него был частный установщик.

0 голосов
/ 19 февраля 2010

Я предполагаю, что вы видите один из приятных побочных эффектов оптимизации компилятора:

  • У вас есть объявление на уровне поля, которое никогда не используется.
  • Компилятор видит это в одном из многочисленных проходов и говорит: «Эй, никто не использует это»
  • Компилятор удаляет декларацию, содержимое которой эта крошечная оптимизация никому не повредит.
  • Позже, когда сгенерирован WSDL, сборка отражается, и теперь ей не хватает этой замечательной общедоступной переменной, которую никто не использовал.

Теоретически, это должно происходить только на «сборках релиза», но я недостаточно знаю о различных оптимизациях, которые компилятор «уполномочен» делать, чтобы дать окончательный ответ.

0 голосов
/ 19 февраля 2010

Неужели на серверах, с которых он исчез, установлена ​​.NET 3.5 случайно, а на серверах, которые все еще показывают ее, этой версии нет? Не уверен, что этот вопрос может быть тем же, с чем вы сталкиваетесь, или вы пометили поле / свойство как [Obsolete], которое .NET (2.0 и выше) не сериализует.

0 голосов
/ 17 февраля 2010

Открытая строка EmployeeID; это не объявление свойства, а объявление поля. Вы уверены, что класс из wsdl создан, имеет свойство, а не поле?

...