在MS Web Developer 2010 Express中构建WCF服务库

时间:2012-02-15 12:31:31

标签: wcf

我在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>

2 个答案:

答案 0 :(得分:2)

上面的配置存在一些问题。

  1. service元素的名称为attibute,不是完全限定名称。

  2. endpoint元素的contract属性值不是完全限定名。

  3. 完全限定名称如下所示:

    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,它就会缓存它。