我在MS Web Developer 2010 Express中创建了WCF服务库,其中ITestSerivce是服务合同,并且遵循Web.config配置。但我得到这个错误 : 错误:无法从http://localhost:56016/TestService.svc获取元数据 : 我不明白为什么网址为http://localhost:56016,其中基地址为http://localhost:8001
任何人都可以帮我解决这个问题。
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="ServiceBehavior" name="TestService">
<host>
<baseAddresses>
<add baseAddress ="http://localhost:8001/" />
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="ITestService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!--Setting httpGetEnabled you can publish the metadata -->
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="SampleServiceBinding">
<security/>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
答案 0 :(得分:2)
上面的配置存在一些问题。
service元素的名称为attibute,不是完全限定名称。
endpoint元素的contract属性值不是完全限定名。
完全限定名称如下所示:
MyWCFService.TestService (i.e. namespace.ServiceName)
如果您在Cassini Web服务器上运行相同的操作,则右键单击属性,然后在Web选项卡下确保选中“User Visual Studio开发服务器”选项,并且未选中“自动分配端口”选项。而是选择“特定端口”并使用8001匹配您的配置
答案 1 :(得分:0)
<baseAddresses>
配置仅适用于self-hosted服务+应用程序,IIS / WAS不使用。
除非您使用的是无文件激活(article here)等功能,否则您将'.svc放在您的网络服务器/网站上的位置定义其网址
您的IIS网址将类似于
http://localhost:8001/MyApp/TestService.svc?wsdl
我不确定为什么WCF测试客户端默认为错误的URL - 只需键入正确的URL,它就会缓存它。