修改客户端配置文件:
在客户端的配置文件中添加<appSettings>,方便获取更改.
/// <summary>
/// 更改配置文件
/// </summary>
/// <param name="serverIp"></param>
public static void ChanageConfig(string serverIp)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
ConfigurationSectionGroup sct = config.SectionGroups["system.serviceModel"];
ServiceModelSectionGroup serviceModelSectionGroup = sct as ServiceModelSectionGroup;
ClientSection clientSection = serviceModelSectionGroup.Client;
foreach (ChannelEndpointElement item in clientSection.Endpoints)
{
string[] str = item.Address.ToString().Split('/');
string pattern ="";
for (int i = 0; i < str.Length-2; i++)
pattern += str[i] + '/';
string address = item.Address.ToString();
string replacement = string.Format("{0}", serverIp);
address = Regex.Replace(address, pattern, replacement);
item.Address = new Uri(address);
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("system.serviceModel");
}
修改服务端配置文件:
在服务端的配置文件中也添加<appSettings>,方便获取更改.
/// <summary>
/// 更改服务配置文件
/// </summary>
/// <param name="serverIp"></param>
public static void ChangeServiceConfig(string serverIp)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
ConfigurationSectionGroup sct = config.SectionGroups["system.serviceModel"];
ServiceModelSectionGroup serviceModelSectionGroup = sct as ServiceModelSectionGroup;
ServicesSection serviceSection = serviceModelSectionGroup.Services;
foreach (ServiceElement item in serviceSection.Services)
{
string address = item.Host.BaseAddresses[0].BaseAddress;
string[] str = address.Split('/');
string pattern = "";
for (int i = 0; i < str.Length - 2; i++)
pattern += str[i] + '/';
string replacement = string.Format("{0}", serverIp);
address = Regex.Replace(address, pattern, replacement);
item.Host.BaseAddresses[0].BaseAddress = address;
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("system.serviceModel");
}
WCF中容易出现的错误:在服务“Service1”实现的协定列表中找不到协定名称
出错的原因有两个:
1. 看契约是否写对, 这个一般不会写错
2.看配置文件:service name="空间名+服务名称" endpoint contract="空间名+契约名称"
(这里有个小细节要注意, ""中不能出现空格,否则依然报错)