2013-05-07 2 views
0

У меня есть Silverlight приложения, которое использует пользовательские DomainContextGenerator и пользовательские EntityGenerator:Генерации .svc-файлы на IIS терпит неудачу при использовании пользовательских RIAServices.T4 генерации кода

[DomainServiceClientCodeGenerator("MainCodeGenerator", "C#")] 
public class HrCodeGenerator : CSharpClientCodeGenerator 
{ 
    protected override EntityGenerator EntityGenerator 
    { 
     get { return new HrEntityGenerator(); } 
    } 

    protected override DomainContextGenerator DomainContextGenerator 
    { 
     get { return new HrDomainContextGenerator(); } 
    } 
} 

Этот класс и ссылки генераторов содержатся в библиотеке классов, на которую ссылается хост-проект приложения Silverlight.

При запуске приложения в VisualStudio 2012 все работает нормально, и когда я открываю Http: / /localhost:12345/My-Namespace-MyService.svc в браузере можно увидеть целевую страницу сервиса. При развертывании приложения в IIS, однако, происходит сбой в работе .svc-файлов «на лету» и при открытии http: / /dev.example.com/My-Namespace-MyService.svc Я просто получаю HTTP 404.

После удаления HrCodeGenerator-класса из проекта (удаление DomainServiceClientCodeGeneratorAttribute не поможет), все работает нормально.

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

ответ

0

Я, наконец, решил проблему.

Классы, ответственные за формирование кода клиента, были расположены в той же библиотеке, что и сами службы. Я переместил эти классы в проект веб-приложения, который развертывается на сервере.

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

Но как мой коллега говорит: «Иногда техника неотличима от магии ...»