自托管WCF服务:无法使用wcfTestClient-无法获取元数据
本文关键字:wcfTestClient- 获取 元数据 WCF 服务 | 更新日期: 2023-09-27 18:28:27
服务确实正常工作,但由于某种原因,我无法从本地pc到服务器使用wcftestclient.exe-我想使用wcftestsclient.exe调用一个方法。
它是全公司内部的,自托管(在windows服务中运行,没有iis)。框架4。Basichttbinding,不需要任何安全的东西。
这是我的servicemodelconfig。。。
<system.serviceModel>
<services>
<service name="myService">
<endpoint
address="http://servername:8001/myService"
binding="basicHttpBinding"
contract="IMyService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name ="MyDefaultBehaviour">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://servername:8001/myService/mex" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="1" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
我明白。。。
错误:无法从获取元数据如果这是您可以访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅MSDN文档,网址为http://go.microsoft.com/fwlink/?LinkId=65455.WS-元数据交换错误URI:
元数据包含无法解析的引用:"。内容类型应用程序/soap+xml;charset=utf-8不受服务支持
客户端和服务绑定可能不匹配。远程服务器返回错误:(415)无法处理消息,因为内容类型为"application/soap+xml;charset=utf-8"不是预期的类型"text/xml;charset=utf-8'。。HTTP GET错误URI:
下载"http://"时出错
请求失败,HTTP状态为400:请求错误。
我已经在上面删掉了我们的服务器名,所以有很多空格,但希望信息足够清晰。
我做了添加额外端点的实验。。。
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
但这样一来,windows服务就无法启动。
感谢
-----后来添加的---也尝试过这个,但再一次,服务没有启动
<system.serviceModel>
<services>
<service name="myService" behaviorConfiguration="MyDefaultBehaviour">
<host>
<baseAddresses>
<add baseAddress="http://myServer:8001/myService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="basicHttpBinding"
contract="Contracts.ImyService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetaDataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name ="MyDefaultBehaviour">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="1" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
如果添加mexendpoint,则需要添加baseAddress:如下所示:
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9999/WcfTcp/Service1"/>
</baseAddresses>
</host>
我的第二个配置毕竟可以工作,即使用basaddresses、标准端点的空字符串和"mex"端点。IMetadataExchange的拼写大写D不正确。已排序。非常感谢@Grady