【问题标题】:Error: Cannot obtain Metadata from WCF service错误:无法从 WCF 服务获取元数据
【发布时间】:2011-08-28 17:14:46
【问题描述】:

我有一个成功运行的 WCF 服务,我可以使用 javascript 调用它。但是我想使用 WCF 测试客户端调用它,我很难做到这一点。有人告诉我,我需要确保已在指定地址启用元数据发布。阅读文档后,我只是看不出我的意思是我的配置:

    <system.serviceModel>
       <services>
           <service name="CommentSessionIDWCFService" 
                    behaviorConfiguration="CommentSessionIDBehavior">
              <endpoint 
                  address="" 
                  behaviorConfiguration="CountryProvinceBehavior"
                  binding="webHttpBinding" 
                  contract="ICommentSessionIDWCFService" />
           </service>
       </services>
       <behaviors>
          <serviceBehaviors>
             <behavior name="CommentSessionIDBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
             </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
              <behavior name="CountryProvinceBehavior">
                  <webHttp/>
              </behavior>
          </endpointBehaviors>
       </behaviors>
    </system.serviceModel>

我已阅读其他帖子,但我看不到要填充的内容,而且我不断收到错误消息。 Q的..

  1. 我是否正确地说我需要在我的配置中配置一个全新的服务来显示元数据?

  2. 我应该在配置中添加什么来发布此元数据以便我可以使用客户端调用?

【问题讨论】:

  • 感谢编辑 mark 你是怎么整理的?标签按钮对我不起作用...

标签: c# wcf


【解决方案1】:

您的服务需要一个元数据端点,这是一个示例。

<services>
    <service name="MyService" behaviorConfiguration="MEX">
    <endpoint
        address="http://localhost:8000/MEX"
        binding="mexHttpBinding"
        contract="IMetadataExchange"
    />
    </service>
</services>

<behaviors>
    <serviceBehaviors>
        <behavior name="MEX">
            <serviceMetadata/>
        </behavior>
    </serviceBehaviors>
</behaviors>

【讨论】:

  • 我只需要这样做吗? localhost:8000/MEX 物理指向什么?
  • 它在服务器上添加一个端点,该端点在端口 8000 上侦听基于 IMetadataExchange 合同的元数据请求。它以构建服务代理所需的数据进行响应。 VS 在您执行“添加引用”操作时使用此数据。
  • 谁对这个答案投了反对票,请提供这样做的理由。
  • 我的也是(+1)
  • @Menahem 我有同样的问题:我应该在哪里添加您提供的代码行?在我的代理的 app.config 中,我有这些:' localhost/Service1.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" /> '我应该编辑合同价值吗?
【解决方案2】:

在更改 TestClient 中的配置文件后,我遇到了类似的问题,右键单击并“使用 svceditor 编辑”以增加我的最大缓冲区大小。如果有人也犯了这个错误,请尝试重建您的项目。

【讨论】:

    【解决方案3】:

    添加

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    【讨论】:

      【解决方案4】:

      httpGetEnabled 设置为true 并将includeExceptionDetailInFaults 设置为false

      <serviceMetadata httpGetEnabled="true"/>
      
      <serviceDebug includeExceptionDetailInFaults="false"/>
      

      【讨论】:

        猜你喜欢
        • 2012-11-26
        • 2012-04-28
        • 2023-03-25
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 2016-04-10
        • 2021-04-17
        • 1970-01-01
        相关资源
        最近更新 更多