1

我一直在尝试服务工厂,但在长文件名方面遇到了一些问题——超过了 Vista/XP 的限制。问题在于,从模型服务工厂生成代码时,所有内容都带有指定的命名空间。使文件夹结构变得巨大。例如开始于

c:\work\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 访问
c:\work\sftest\MyWebService\MyCompany.SFTest.MyWebService\Source\Service 接口
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

这会破坏配方,因为 Windows 不能接受超过特定长度的文件名。

是否有必要在每个文件夹名称中明确包含命名空间?显然,在某些时候,我可能想将服务分支到另一个位置,但出于与上述相同的原因,可能无法做到。有解决方法吗?

4

2 回答 2

1

我们确实遇到了这个问题,我们通过使我们的服务工厂成为一个非常薄的普通库(已用 WCF 东西标记)的包装器来解决它。这给了我们一个通常很深的项目(工厂),然后是一个非常深的包装器工厂(没有所有提取接口和逻辑等等)。

我们仍然有一些问题——但主要是在客户端——我们的服务器大部分都没有问题。

于 2008-12-16T04:05:53.310 回答
1

我不知道服务工厂,所以我不确定这是否会有所帮助。无论如何:也许来自 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"

服务工厂是否允许这种表示法?

于 2008-09-17T15:20:41.687 回答