2010-12-30 1 views
3

Служба Windows на Windows Server 2003 (виртуальная машина Amazon). Некоторые приложения могут общаться с ним (используя каналы, но для этого есть обертка). Он протестирован и работает. Кроме того, есть веб-служба, написанная на C# (ASP.NET), которая взаимодействует с упомянутой службой Windows. Когда вызывается Web Method, он создает экземпляр класса и вызывает функцию - функция «подключается» к службе Windows и отправляет задание на нее. Но если внутри Web-метода создается поток, а функция, которая «подключается» к службе Windows, вызывается внутри потока - соединение терпит неудачу. Подключение к службе Windows использует каналы. Веб-сервис работает на IIS7. Стоит упомянуть, что все работает на моей локальной машине, либо от отладчика (локальный сервер, запущенный VS 2010), либо от IE, когда я вызываю веб-метод на веб-службе, который работает на локальном IIS7. В местных все работает - но на Amazon Instance нет. Я не веб-программист, поэтому я думаю, что есть проблема с безопасностью. Любой намек? Благодарю.Проблема веб-службы ASMX Связь с службой Windows в отдельной теме

EDIT: комментарий Uwe напомнил мне - веб-метод сначала пытается загрузить некоторые файлы с помощью http и сохраняет их на путь C: \ intetpub \ wwwroot \ files \. Он работает, если файлы загружаются из веб-метода , но загрузка завершается с ошибкой, если она выполнена из другого потока, созданного в веб-методе. Исключение: доступ запрещен. Поэтому я изменил параметры безопасности в указанной папке и явно разрешил пользователю, созданному IIS7 (IIS_IUSRS), читать/записывать папку и . Теперь файлы могут быть загружены кажется, что источник этих проблем является тот же

EDIT:.. решение перемещается в ответ на предложение Уилла

+0

Можете ли вы разместить информацию о том, как «соединение сбой» на самом деле ведет себя? То есть подробное сообщение об ошибке, трассировка стека, поведение и т. д. –

+1

Как сбои подключения не имеют отношения к делу, так как «соединение» является вызовом функции. Проблема в том, что я могу общаться с сервисом Windows из веб-службы, если связь происходит из того же потока, в котором выполняется Web-метод; если Web-метод создает новый поток - связь не выполняется. У меня больше нет данных от упомянутой службы Windows. Так как это работа из одного потока на виртуальной машине Amazon, а не в том случае, если потоки разные, а также работает на моем локальном компьютере даже с разными потоками, я думал, что это что-то связано с безопасностью или разрешениями. Благодарю. – Vladimir

+1

@ Vladimir: если не удается установить соединение, почему бы не притвориться, что он вообще не терпит неудачу? Конечно, это актуально. –

ответ

2

Одобренные ванты, решение найдено, и как Порекомендую, я отправлю его здесь, как ответ на мой собственный вопрос. Таким образом, решение:

Проблема заключалась в том, что поток, созданный с помощью Web Method, должен быть выдан. Таким образом, в методе звонящего мне пришлось что-то вроде:

[WebMethod] 
public void Fnc() 
{ 
    ... 
    ... 
    System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent(); 
    System.Threading.Thread postJobThread = new Thread(PostJobThread); 
    postJobThread.Start(wi); 
    ... 
} 

... 

private void PostJobThread(object ob) 
{ 
    System.Security.Principal.WindowsIdentity wi = (System.Security.Principal.WindowsIdentity)ob; 
    System.Security.Principal.WindowsImpersonationContext ctx = wi.Impersonate(); 

    ... 
    // Do some job which couldn't be done in this thread 
    ... 
    // OK, job is finished 
    if(ctx != null) 
    ctx.Undo(); 
} 

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

Смежные вопросы