Сервисная фабрика: чрезвычайно длинные проблемы с путями / именами файлов - PullRequest
1 голос
/ 17 сентября 2008

Я пробовал Service Factory и столкнулся с некоторыми проблемами в отношении длинных имен файлов - превышение предела в Vista / XP. Проблема в том, что при генерации кода из фабрики сервиса моделей все префиксы преобразуются в указанное пространство имен. Создание огромной структуры папок. Например, начиная с

C: \ работа \ sftest \ MyWebservice

Я создаю каждую из моделей с умеренной длиной имен в контрактах данных и интерфейсе сервиса. Я установил для пространства имен MyCompany.SFTest.MyWebservice

После генерации кода я получаю

c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Business Logic
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Resource Access
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.DataContracts
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.FaultContracts
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.MessageContracts
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.ServiceContracts
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.ServiceImplementation
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Tests

В каждой из папок находится файл проекта с одинаковым префиксом

c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.ServiceImplementation\MyCompany.SFTest.MyWebService.ServiceImplementation.proj

Это взрывает рецепт, поскольку окна не могут принимать имена файлов, превышающие определенную длину.

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

Ответы [ 2 ]

1 голос
/ 16 декабря 2008

У нас была именно эта проблема, и мы обошли ее, сделав нашу фабрику сервисов очень тонкой оберткой вокруг обычной библиотеки (которая была размечена с помощью материала WCF). Это дало нам обычно глубокий проект (фабрика), а затем потрясающе глубокую фабрику оболочек (без всего того, что извлекает интерфейс и логику, а что нет).

У нас все еще есть некоторые проблемы - но в основном на стороне клиента - наши серверы по большей части безотказны.

1 голос
/ 17 сентября 2008

Я не знаю Service Factory, поэтому я не уверен, поможет ли это. В любом случае: может быть, статья Присвоение имени файлу или каталогу из MSDN может помочь.

Windows API имеет максимальную длину для путей (MAX_PATH = 260). Если вы хотите использовать более длинные имена путей, вам придется использовать версии API для Unicode, добавив префикс "\\? \", Т.е. е. используйте

"\\?\C:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.ServiceImplementation\MyCompany.SFTest.MyWebService.ServiceImplementation.proj"

вместо

"C:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service Interface\MyCompany.SFTest.MyWebService.ServiceImplementation\MyCompany.SFTest.MyWebService.ServiceImplementation.proj"

Фабрика обслуживания разрешает эту запись?

...