WCF 服务主机找不到任何服务元数据。请检查元数据是不是启用

Posted

技术标签:

【中文标题】WCF 服务主机找不到任何服务元数据。请检查元数据是不是启用【英文标题】:WCF service host cannot find any service metadata. Please Check if metadata is enabledWCF 服务主机找不到任何服务元数据。请检查元数据是否启用 【发布时间】:2018-10-27 20:37:00 【问题描述】:

我的 App.config 文件是

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WcfJsonRestService.Service1">
        <endpoint address="http://localhost:8733/service1" 
                  binding="webHttpBinding" 
                  contract="WcfJsonRestService.IService1"/>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

我的 service1.cs 代码如下

using System;
using System.ServiceModel.Web;

namespace WcfJsonRestService

    public class Service1 : IService1
    
        [WebInvoke(Method = "GET", 
                    ResponseFormat = WebMessageFormat.Json, 
                    UriTemplate = "data/id")]
        public Person GetData(string id)
        
            // lookup person with the requested id 
            return new Person()
                       
                           Id = Convert.ToInt32(id), 
                           Name = "Leo Messi"
                       ;
        
    

    public class Person
    
        public int Id  get; set; 
        public string Name  get; set; 
    

最初这是给问题的

WCF 服务主机配置 - 请尝试将 HTTP 端口更改为 8733

所以我按照在 CMD 中执行以下代码

netsh http add urlacl url=http://+:8733/ user=WORK\Clara

执行此代码后,我面临以下新错误

我该如何解决这个问题?

我也尝试过更新 App.Config,如下面链接所述,但后来又遇到了一些错误

WCF service host cannot find any service metadata

【问题讨论】:

您提到的链接包含您的解决方案,您在更新 webconfig 时遇到了什么错误?如果在 IIS 上,请确保您正在编辑 Web.config(不是 App.config)。 @EzLo wenconfig 不存在,我有 app.config,我正在本地运行,即 Visual Studio 【参考方案1】:

您缺少服务元数据行为配置。请添加以下配置:

<configuration>
<system.serviceModel>
<services>
  <service name="WcfJsonRestService.Service1">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733"/>
      </baseAddresses>
    </host>
    <endpoint address="service1"
              binding="webHttpBinding"
              contract="WcfJsonRestService.IService1"/>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior>
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled ="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

【讨论】:

我已添加 thsi 行,但由于 ServiceMetadataBehavior 的 HttpGetEnabled 属性设置为 true 且 HttpGetUrl 属性是相对地址,但我收到错误消息,但没有 http 基地址。要么提供一个 http 基地址,要么将 HttpGetUrl 设置为一个绝对地址。在 System.ServiceModel.Description.ServiceMetadataBehavior.CreateHttpGetEndpoints(ServiceDescription 描述,ServiceHostBase 主机,ServiceMetadataExtension mex) @MiteshJain:我已经更新了我的答案。您需要添加基地址。 感谢它的工作,因为我是 wcf 的新手,我不知道要添加什么:-)

以上是关于WCF 服务主机找不到任何服务元数据。请检查元数据是不是启用的主要内容,如果未能解决你的问题,请参考以下文章

WCF调试错误:添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。

WCF Web 服务错误

WCF 测试客户端:添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据

添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。 WCF 错误

wcf 数据服务是不是可以返回 json 格式的元数据?

在 C# 中调用 WCF 元数据时出现 *** 错误