Windows 10和svcConfigEditor之后的WCF测试客户端

问题描述 投票:2回答:3

多年来一直在使用WCF测试客户端,测试我使用的外部托管的Web服务。

我经常诅咒使用关于绑定的设置保存标准配置的不可靠性,因为我对某些方法需要增加标准65536的maxRecievedMessageSize - 以及偶尔的其他设置。

我通常每次都必须使用svcConfigEditor进行更新。但我和那个一起生活。

UNFORTUNATLY - 更新到Windows 10并重新安装后,我无法再编辑配置文件。或者我可以编辑,但服务不会像以前一样使用新设置重新加载。我也试过手动编辑文件,我尝试用编辑器手动保存后再刷新服务。

有人知道原因或解决这个问题吗?

wcf-binding wcftestclient
3个回答
1
投票

我遇到了同样的问题,并将我的新安装与旧的安装进行了比较。

首先,您必须从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文件中为具有不同配置的不同服务添加其他条目。


0
投票

克里姆森的回答是正确的。使用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>

0
投票

问题似乎是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);
}
© www.soinside.com 2019 - 2024. All rights reserved.