我们有一个包含ASP.Net(表单)UI和一些WCF Web服务的Web项目。这是在IIS 6中托管的.UI和WCF服务都使用PDF生成工具,该工具需要许可证,存储在web.config文件的<appSettings>
部分中。许可证基于网站的域名,即example.com(所有子域名都包含在许可证中)。
当调用该工具的DLL时,它会检查它是否确实在其获得许可的域中运行。当UI调用此工具时,一切正常。当WCF服务执行相同操作时,该工具以某种方式获取服务器的名称而不是域名,因此认为它是未经许可的。
我真的不想专注于这个工具,我想知道的是:
如果.aspx
和.svc
文件(及其父DLL)都托管在同一个IIS 6网站和虚拟目录中,它们是否应在相同的帐户/用户/权限集/等下运行? WCF服务实现(和合同)是否在一个单独的DLL中是否重要?
答案 0 :(得分:3)
我想知道该工具是如何进行检查的......我希望您可能需要enable ASP.NET compatibility mode。另一件事是在WCF配置中使地址显式(而不是相对)。
不,关于单独的dll并不重要,不应该关于帐户(尽管一切皆有可能!)。
编辑:
或在web.config中,在system.serviceModel:
下 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
答案 1 :(得分:1)
启用ASP.Net兼容性可以解决问题。谢谢Marc Gravell!但是,值得指出的是,您还需要更改实现服务合同的类 - 该类需要以下属性:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
它也可以设置为必需。有handy table on MSDN。
(我不知道显式寻址是否也有效,我们不能使用它,因为服务在SSL卸载负载均衡器(F5)之后。因此WCF认为服务是通过HTTP而实际上已经结束了HTTPS。)