背景:我们有一个 ClickOnce 部署的 WPF 应用程序,它与 WCF 服务对话,后者又与我们自己的 SQL 数据库对话,并通过客户端 OM 与 SharePoint 对话。为了设置 WCF 和 ClickOnce,我们有一个 Setup 项目,它从安装用户那里获取有关服务器路径和数据库连接字符串的详细信息,并触发 Installer 类来做一些有趣的事情,比如编写配置 XML 并为此更新 ClickOnce 绑定器部署 URL 等。
我们需要通过此安装程序将一些 BDC 模型添加到 SharePoint,以便最终用户可以使用 SharePoint 列表界面来配置我们数据库中一些很少更改的表值。(尽可能“一键式”安装过程是客户强加的要求。)
在我们的 Visual Studio 2010 解决方案中包含一个 BDC 模型项目,我们可以为我们的 BDC 东西获得一个打包的 WSP,这听起来很棒……
但是,这样做的一个问题是,在被打包到这个 WSP 中的 feature.xml 中,出现此硬编码行:
<Property Key="SiteUrl"
Value="http://BuildingWorkstationSharePointInstanceUrl/" />
Visual Studio 不会将 SiteUrl 功能设置为机器本地的 SharePoint 实例以外的任何内容(这很蹩脚),因此我们无法更改 WSP 之前的那个。
此外,.bdcm 文件本身具有硬编码的连接字符串信息:
<LobSystemInstance Name="DatabaseName">
<Properties>
<Property Name="AuthenticationMode" Type="System.String">PassThrough</Property>
<Property Name="DatabaseAccessProvider" Type="System.String">SqlServer</Property>
<Property Name="RdbConnection Data Source" Type="System.String">DatabaseServer</Property>
<Property Name="RdbConnection Initial Catalog" Type="System.String">DatabaseName</Property>
<Property Name="RdbConnection Integrated Security" Type="System.String">SSPI</Property>
<Property Name="RdbConnection Pooling" Type="System.String">True</Property>
<Property Name="ShowInSearchUI" Type="System.String" />
</Properties>
</LobSystemInstance>
一旦安装用户提供了数据库连接信息,安装程序也必须重新编写。
我也不确定通过 MSI 在服务器上实际安装 WSP 的最佳方法是什么(到目前为止,我只考虑过尝试执行 powershell 脚本)。
在我看来,为第三方设计 BDC 模型不应该是一个晦涩难懂的场景,但我找不到任何关于如何克服这些问题的信息或支持!
有人有什么建议吗?