多年来一直在使用WCF测试客户端,测试我使用的外部托管的Web服务。
我经常诅咒使用关于绑定的设置保存标准配置的不可靠性,因为我对某些方法需要增加标准65536的maxRecievedMessageSize - 以及偶尔的其他设置。
我通常每次都必须使用svcConfigEditor进行更新。但我和那个一起生活。
UNFORTUNATLY - 更新到Windows 10并重新安装后,我无法再编辑配置文件。或者我可以编辑,但服务不会像以前一样使用新设置重新加载。我也试过手动编辑文件,我尝试用编辑器手动保存后再刷新服务。
有人知道原因或解决这个问题吗?
我遇到了同样的问题,并将我的新安装与旧的安装进行了比较。
首先,您必须从Always regenerate config when launching services
取消选择Tools->Option
并退出WCF测试客户端。
我发现新安装缺少AddressToConfigMapping.xml
文件夹中的C:\Users\<user>\Documents\Test Client Projects\15.0\CachedConfig
文件,我必须创建它。
AddressToConfigMapping.xml文件的内容应为:
<Mapping>
<Entry>
<Address>http://localhost/TestService.svc</Address>
<ConfigPath>C:\Users\<user>\Documents\Test Client Projects\15.0\CachedConfig\Client.dll.config</ConfigPath>
</Entry>
</Mapping>
然后,您可以在scvConfigEditor中编辑配置文件,并将文件保存到C:\Users\<user>\Documents\Test Client Projects\15.0\CachedConfig\Client.dll.config
,并将地址元素的内容替换为您正在测试的服务。
现在,当您在WCF测试客户端中添加服务时,应加载已保存的配置。
如果必须测试多个服务,则可以在AddressToConfigMapping.xml
文件中为具有不同配置的不同服务添加其他条目。
克里姆森的回答是正确的。使用Windows 10和VisualStudio 2018社区时,不会创建目录和映射文件。您可以自己创建它们来解决它。
我要强调的另一点是,需要为Address字段提供的值必须是服务的元数据端点,而不仅仅是服务的端点。您通常可以在App.config中找到元数据端点
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:80/MyTravelAgency/" />
</baseAddresses>
</host>
在我的服务中,AddressToConfigMapping.xml文件看起来像
<Mapping>
<Entry>
<Address>http://localhost/MyTravelAgency/mex</Address>
<ConfigPath>C:\Users\Roger\Documents\Test Client Projects\15.0\CachedConfig\Client.dll.config</ConfigPath>
</Entry>
</Mapping>
问题似乎是svcConfigEditor的保存行为。通常会引发文件更改事件,但来自svcConfigEditor的更改会引发一个未被wcf test client处理的重命名事件。让它工作的一种方法是对wcf测试客户端进行反向工程,并扩展FileSystemWatcher以获取重命名的事件。另一种方法是打开您喜欢的文本编辑器,并在编辑后用新的空白行保存配置文件。在这种情况下,将触发更改的事件并显示重新加载屏幕。
配置文件可以在%localappdata%\Temp\Test Client Projects\
中找到
要获取重命名的事件,您需要处理fileSystemWatcher.Renamed
并使用以下设置扩展fileSystemWatcher.NotifyFilter
:
NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.Security
如果发生fileSystemWatcher.Renamed
,则调用的相关代码是:
string fullPath = eventArgs.FullPath;
ServiceProject serviceProject = this.workspace.FindServiceProject(fullPath);
if (serviceProject != null)
{
this.TryRefreshConfig(serviceProject);
}