服务器为 Windows Server 2012,端口号为8080,防火墙打开端口,客户端可以访问到svc文件,在客户端使用 svcutil.exe 或在 VS2012 中添加服务引用时出错。
查阅各方神圣的资料及手记,解决方法如下:
修改 Web.config 文件的 serviceBehaviors 内容如下:
<behaviors>
<serviceBehaviors>
<behavior name=<behaviorName>>
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="portNumber"/>
<add scheme = "https" port = "portNumber"/>
</defaultPorts>
</useRequestHeadersForMetadataAddress>
<!--behavior的其它内容--!>
</behavior>
</serviceBehaviors>
</behaviors>
<!--配置文件其它内容--!>
<services>
<service behaviorConfiguration= <behaviorName>>
<endpoint binding=<binding> contract=<contract> />
</service>
</services>
重点是要添加红色文本部分内容,增加元数据访问端口,使客户端可以正常下载元数据。其中 behaviorName 为占位符,程序中应为具体的 behavior 名。同理,portNumber应为具体的端口号,我的程序中为8080,binding, contract依次类推。