Используйте методы экземпляра, если это возможно.
общественность Использования статический Func [T, U] (статические ссылки на функцию, которыми можно заменить ложные функции), где методы экземпляра не возможны.
В 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
фактически требует is и не будет работать без него.
Как только вы это сделаете, вы должны получить свой HttpContext.
Вам нужно будет подключить отладчик (Visual Studio) к процессу службы IIS.
В Visual Studio перейдите в «Отладка» -> «Присоединить к процессу» и выберите процесс IIS в поле «Присоединить». для диалогового окна «Обработка».
В IIS7 имя процесса - w3wp.exe, но вам может потребоваться выбрать Показать процессы всех пользователей или Показать процесс во всех сеансах до того, как он станет доступным.
Когда отладчик правильно подключен к процессу IIS, вы можете установить одну или несколько точек останова в своем коде и вызвать службу.
Вы должны подключиться к процессу IIS, а именно к aspnet_wp.exe в XP и w3wp.exe на сервере 2003. Таким образом вы попадете в точки останова и т. Д.
Если вы ищете способ протестировать саму службу WCF, я бы предложил использовать WcfTestClient .
И помните, что процесс IIS не отображается в диспетчере задач, пока вы не попадете на сервер хотя бы один раз (например, после перезагрузки вам нужно будет хотя бы раз открыть страницу на сервере, чтобы процесс запустился).
Спасибо за решения. У меня была такая же проблема. Мое решение теперь отлично работает с 2 файлами svc.
Для решения проблемы я внес два изменения
В Web.Config я прокомментировал строку
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
и
Добавил атрибут [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] на классы, реализующие интерфейсы.