为使用 WCF 服务的 Web 应用程序创建安装文件





5.00/5 (1投票)
为 WCF 框架连接字符串,并为 Web 应用程序提供服务 URL 以进行通信
引言
上一篇文章中,我们已经了解了为 Windows 应用程序创建安装程序以及创建连接字符串的方法。现在
我们将看到在具有 WCF 服务的 Web 应用程序中的相同概念。
步骤
步骤 1:我们需要为 WCF 服务项目创建安装文件,并动态地构建连接字符串。
步骤 2:创建另一个安装程序,用于需要消耗 WCF 服务 URL 的 Web 应用程序,以便在 WCF 服务和 Web 应用程序之间进行通信。
为 WCF 项目创建安装程序
安装程序创建的初步信息
- 有关添加安装程序项目、输入渲染和连接字符串构建的基本信息,请参考本文:
https://codeproject.org.cn/Tips/446121/Adding-connection-String-During-Installation
自定义安装程序以创建连接字符串
在此过程中,我们将从用户处获取实例名称和数据库名称,并在安装期间使用。
添加主输出文件
在这里,我们需要选择主输出文件和内容文件,并将所有 DLL 的“复制到本地”属性设置为 true。
添加自定义操作数据
在此步骤中,我们传递输入的连接字符串参数。
现在,我直接进入下一步,即查找文件路径并创建虚拟目录。
// OnAfterInstall
dataSource = "Data Source = " + dataSource + ";Integrated Security=SSPI;";
string configFile=string.Concat(Assembly.GetExecutingAssembly().Location,"Web.config");
int index = configFile.IndexOf("bin");
configFile = configFile.Substring(0, index);
VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(configFile, true);
WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
System.Configuration.Configuration webConfig =
System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
string connectionsection =
webConfig.ConnectionStrings.ConnectionStrings["ConnectionString"].ConnectionString;
ConnectionStringSettings connectionstring = null;
if (connectionsection != null)
{
webConfig.ConnectionStrings.ConnectionStrings.Remove("ConnectionString");
}
connectionstring = new ConnectionStringSettings("ConnectionString", dataSource);
webConfig.ConnectionStrings.ConnectionStrings.Add(connectionstring);
webConfig.Save();
ConfigurationManager.RefreshSection("connectionStrings");
- 如果我们在 web.confg 中找到任何连接字符串,我们将删除它并添加一个基于用户提供的输入的新连接。
Web.Config 连接字符串部分
//Web.Config Connection string section
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=Instancename;Initial Catalog=Databasename;Integrated Security=SSPI"
</connectionStrings>
- 现在安装文件已准备好安装,完成构建后它将在 IIS 中托管。
需要记住的点
- 我们正在更改 web.config 中的这一部分,这里的键名应与安装程序类中提供的键名匹配(add name="ConnectionString")。
为 Web 应用程序创建安装文件
- 在此安装过程中,我们需要提供一个文本框来获取服务 URL,以便与 WCF 服务进行通信。
- 提供一个文本框、主输出文件和内容文件,以及上述文章中解释的自定义操作数据。
我们需要提供在运行服务后获得的 service url。
安装期间添加的自定义文本框,用于提供端点 URL
// Web.Config showing end pont address <client> <endpoint address="https://:8080/HiSEDService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHiSEDService" contract="WCFService.IHiSEDService" name="BasicHttpBinding_IHiSEDService"/> </client>
我们需要插入一个新的服务 URL 端点地址(“https://:8080/HiSEDService.svc”)。
此 URL 有助于创建一个通信平台。
//OnAfterInstall string dataSource = Context.Parameters["Serviceurl"]; string configFile = string.Concat(Assembly.GetExecutingAssembly().Location,"Web.config"); int index = configFile.IndexOf("bin"); configFile = configFile.Substring(0, index); VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(configFile, true); WebConfigurationFileMap wcfm = new WebConfigurationFileMap(); wcfm.VirtualDirectories.Add("/", vdm); System.Configuration.Configuration webConfig = System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/"); ServiceModelSectionGroup smsg = webConfig.GetSectionGroup("system.serviceModel") as ServiceModelSectionGroup; int value = smsg.Client.Endpoints.Count; smsg.Client.Endpoints[0].Address = new Uri(dataSource); webConfig.Save();
在这里,我们定位文件路径并映射它,在 IIS 中创建虚拟目录,并替换 web.config 中的端点地址 URL。
现在安装程序已准备好安装,构建完成后即可。