创建 wcf .svc 服务时出错

Posted

技术标签:

【中文标题】创建 wcf .svc 服务时出错【英文标题】:Error creating wcf .svc service 【发布时间】:2015-05-28 17:13:42 【问题描述】:

我创建了下面给出的以下 svc 服务-

public class NewsRest : INewsRest

    public string getHomePageNews1()
    
        DataTable dt = new DataTable();
        try
        

            dt = new ManageNews().getHomePageNews1();
           string json = new Utills().dataTableToJsonString(dt);
           json = json.Replace("task-photo-846b6edc-3b2e-4ff6-ba10-734d64143c1d.png", "task-photo-8d5feed4-d6a1-4ae9-9a72-387ccfda1dc5.jpg");
            return json;
        
        catch (Exception ex)
        
            return "";
        
    



 [ServiceContract]
public interface INewsRest

    [OperationContract]
    [WebGet(ResponseFormat=WebMessageFormat.Json)]
    string getHomePageNews1();

和 web config 配置是-

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="NewsRestBehavior">
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"  />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service name="UPNews.WebServices.NewsRest" behaviorConfiguration="NewsRestBehavior">
    <endpoint address=""
              binding="basicHttpBinding"
              contract="UPNews.WebServices.INewsRest" />
    <endpoint address="mex" binding="mexHttpBinding" name="MetadataEndpoint"
     contract="IMetadataExchange" />
  </service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

但是当我在 WCF 测试客户端上测试此服务时,它会出现以下错误。-

错误:无法从http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1 获取元数据 如果这是您有权访问的 Windows (R) Communication Foundation 服务, 请检查您是否已在指定地址启用元数据发布。 如需帮助启用元数据发布, 请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange 错误处的 MSDN 文档 URI:http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1 元数据包含无法解析的引用: 'http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1'。内容类型应用程序/soap+xml; 服务 http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1 不支持 charset=utf-8。 客户端和服务绑定可能不匹配。远程服务器返回错误: (415) Unsupported Media Type.HTTP GET Error URI: http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1 下载时出错 'http://localhost:57358/WebServices/NewsRest.svc/getHomePageNews1'。请求失败,HTTP 状态 400:错误请求。

请告诉这里发生了什么错误。

【问题讨论】:

【参考方案1】:

您必须添加到您的服务器配置以允许 MEX(元数据交换),以便客户端可以检索生成的 WSDL。像这样的:

<service name="UPNews.WebServices.NewsRest" behaviorConfiguration="NewsRestBehavior">
    <endpoint address=""
          binding="basicHttpBinding"
          contract="UPNews.WebServices.INewsRest" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>

【讨论】:

元数据包含无法解析的引用:'localhost:57358/WebServices/NewsRest.svc/getHomePageNews1'。 Sendera:DestinationUnreachableTo 'localhost:57358/WebServices/NewsRest.svc/getHomePageNews1' 的消息无法在接收方处理,因为 EndpointDispatcher 的 AddressFilter 不匹配。检查发送方和接收方的 EndpointAddresses 是否一致 这看起来您的服务器和客户端配置不匹配。确保发送方和接收方的 EndpointAddresses 一致。

以上是关于创建 wcf .svc 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章

wcf HTTP 终止

在android studio中反序列化操作wcf的请求消息体时出错

使用命名管道 WCF 服务时通信对象出错

在 WCF REST 服务中调用 WebGet 时出错

从 wcf 服务调用第三方 Web 服务

在 ClassLibrary 中使用 WCF 服务时出错