Как отладить службу WCF с HTTP-контекстом? - PullRequest
6 голосов
/ 05 октября 2009

Мне нужно отладить службу WCF, но она должна иметь контекст HTTP.

В настоящее время у меня есть решение с веб-сайтом службы WCF, когда я нажимаю на отладку, он запускается, а затем запускает HTML-страницу, которая не содержит тестовой формы.

Пока проект запущен, я попытался запустить wcftestclient вручную, затем, предоставив адрес моей службы, он находит службу, но когда я ее вызываю, она обходит уровень IIS (или сервер разработки), поэтому httpContext равен нулю. ..

Как правильно отлаживать службу WCF через контекст IIS?

Ответы [ 4 ]

9 голосов
/ 05 октября 2009

В WCF для HttpContext по умолчанию и по умолчанию задано значение NULL, даже если служба WCF размещена в IIS; в конце концов, WCF - это , а не ASP.NET.

Если вам действительно нужен HttpContext, вам нужно включить его отдельно, через config (web.config, если вы размещаете в IIS, ваше приложение для самостоятельного размещения app.config в противном случае):

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

и вам нужно указать этот факт (что ваша служба разрешает или даже ожидает режим совместимости с ASP.NET), поместив этот атрибут в свой класс службы (который реализует контракт на обслуживание):

[AspNetCompatibilityRequirements
(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]    
public class MyWCFService : IMyWCFService
{
  ......
}  

RequirementsMode=Allowed просто разрешает режим совместимости с ASP.NET, тогда как RequirementsMode=Required фактически требует, есть и не будет работать без него.

Как только вы это сделаете, вы должны получить HttpContext.Current, когда подключите отладчик к рабочему процессу IIS.

Марк

1 голос
/ 03 декабря 2009

Спасибо за решения. У меня была такая же проблема. Мое решение работает хорошо теперь с 2 SVC файлами.

Чтобы решить проблему, я сделал два изменения

В Web.Config я прокомментировал строку

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

и

Добавлен атрибут [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] * ​​1011 * для класса, реализующего интерфейсы.

1 голос
/ 05 октября 2009

Необходимо подключиться к процессу IIS, а именно aspnet_wp.exe под XP и w3wp.exe на сервере 2003. Таким образом, вы достигнете контрольных точек и т. Д.

Если вы ищете способ протестировать саму службу WCF, я бы предложил использовать WcfTestClient .

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

1 голос
/ 05 октября 2009

Вам нужно будет подключить отладчик (Visual Studio) к процессу службы IIS.

В Visual Studio перейдите в «Отладка -> Присоединить к процессу» и выберите процесс IIS в диалоговом окне «Присоединение к процессу».

В IIS7 именем процесса является w3wp.exe, но вам может потребоваться выбрать Показать процессы всех пользователей или Показать процесс во всех сеансах , прежде чем он станет доступным .

Когда отладчик правильно подключен к процессу IIS, вы можете установить одну или несколько точек останова в своем коде и вызвать службу.

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