Система. Рисование в сервисах Windows или ASP.NET

Это означает, что вы не должны делать следующее:

x = 1

def myfunc():
  global x

  # formal parameter
  def localfunction(x):
    return x+1

  # import statement
  import os.path as x

  # for loop control target
  for x in range(10):
    print x

  # class definition
  class x(object):
    def __init__(self):
      pass

  #function definition
  def x():
    print "I'm bad"
16
задан GEOCHET 25 June 2009 в 22:30
поделиться

5 ответов

Разрешать любой беспорядок, Систему. Рисунок делает работа в соответствии с ASP.NET и Сервисами, это просто не , поддерживал . Могут быть проблемы с высокой загрузкой (исчерпывающий неуправляемые ресурсы), утечки памяти или утечки ресурсов (плохо реализованный или названный располагают шаблоны), и/или диалоговые окна, выталкиваемые, когда нет никакого рабочего стола, чтобы показать им на.

Тестирование будет заботиться о последнем, и контроль предупредит Вас первому. Но, если/когда у Вас есть проблема, не ожидайте мочь назвать PSS и попросить фиксацию.

Так, кто Вы опции? Ну, если Вам не нужен полностью поддерживаемый маршрут, и Вы не ожидаете экстремальную нагрузку - много людей игнорировало протест MSDN и использовало Систему. Рисунок с успехом. Несколько из них были укушены, но существует намного больше успеха, чем истории отказа.

, Если Вы хотите что-то поддерживаемое, затем необходимо знать, работаете ли Вы в интерактивном режиме или нет. Лично, я, вероятно, просто оставил бы его до приложения хостинга для установки неинтерактивного флага где-нибудь или другого. В конце концов, приложение находится в лучшем положении, чтобы определить, находятся ли они в размещенной среде и/или хотят рискнуть GDI + проблемы.

, Но, если Вы хотите автоволшебно обнаружить свою среду, я предполагаю, что существуют худшие ответы, чем предлагается прямо здесь на ТАК для сервиса. Подводя итоги, можно или проверить EntryAssembly, чтобы видеть, наследовался ли он ServiceBase, или попытайтесь получить доступ к Системе. Консоль. Для ASP.NET, в том же направлении, обнаруживая HttpContext. Текущий должно быть достаточным.

я был бы думать был бы управляемый или p/invoke способ искать рабочий стол (который является действительно фактором определения во всем этом, я думаю), и/или что-то от AppDomain, который был бы подсказка Вы в. Но я не уверен, что это, и MSDN является меньше, чем просвещение на нем.

Редактирование: Исследуя MSDN, я вспомнил, что это на самом деле Станция Окна (который размещает рабочий стол), это - важный бит здесь. С той информацией я смог найти GetProcessWindowStation () , который возвращает дескриптор текущей станции окна. При передаче того дескриптора GetUserObjectInformation () получит Вас , структура USEROBJECTFLAGS с должна иметь dwFlags с WSF_VISIBLE, если у Вас есть видимый рабочий стол.

, С другой стороны EnumWindowsStations даст Вам список станций, которые Вы могли проверить - WinSta0 является интерактивным.

, Но, да, я все еще думаю, просто установив приложение свойство, или что-то очень более легкий маршрут....

Редактирование снова: 7 лет спустя я становлюсь хорошо осведомленным в Среда. UserInteractive, где MS делает точный танец GetProcessWindowStation , я описал выше для Вас.... Я все еще рекомендовал бы делегировать к приложению хостинга (они могут хорошо хотеть быстрее, но немного более опасная Система. Рисование пути), но UserInteractive кажется хорошим значением по умолчанию, чтобы иметь, не имея его pinvoke он самостоятельно.

18
ответ дан 30 November 2019 в 22:02
поделиться

Вы могли использовать TextRenderer вместо этого. Я знаю, что странно использовать что-то от Системы. Windows. Формы в ASP.NET, но это, кажется, не имеет то же предупреждение о том, чтобы не быть поддерживаемым в ASP.NET. Я использовал и TextRenderer и Графику. MeasureString для измерения строк в приложениях ASP.NET, таким образом, они оба работа. Я никогда не видел предупреждение о Системе. Рисование не быть желательным в ASP.NET.

TextRenderer намного медленнее, чем Графика. MeasureString, FWIW.

1
ответ дан 30 November 2019 в 22:02
поделиться

Это могло бы быть что-то, чтобы сделать с подсистемой GDI, нуждающейся в потоке STA. Если это верно, исследуйте определение ASPCOMPAT=TRUE в Вашей @PAGE директиве для aspx включенной страницы. Это выполнит aspx страницу в потоке STA, IIRC.

-Oisin

0
ответ дан 30 November 2019 в 22:02
поделиться

Вы смогли копировать System.Drawing.dll в мусорное ведро Вашего приложения и затем использовать его тот путь. Это могло бы гарантировать его доступность.

щелчок правой кнопкой Just по ссылке в Вашем приложении и изменении опция для Копия, Локальная к верный .

я могу неправильно понимать вопрос хотя...

-1
ответ дан 30 November 2019 в 22:02
поделиться

Несмотря на то, что официально это не поддерживается, я много лет широко использовал классы System.Drawing на многопользовательском веб-сервере (как веб-приложения, так и веб-службы), и это не вызывало никаких проблем с производительностью или надежностью.

Я думаю, что единственный способ определить, безопасен ли код для использования, - это тестирование, мониторинг и обертывание любого объекта с внешними ресурсами в операторы using{}.

4
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

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