为什么我的应用声称无法找到我的WCF端点?

时间:2012-03-07 14:31:46

标签: c# wcf service-reference

我在我的WCF应用程序中创建了以下端点,该端点通过GET调用成功运行(至少获取调用):

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "Search/{platform}/{searchedContentTypeList}/?query={query}&requestedFacetGroupCountList={requestedFacetGroupCountList}&searchedFacetList={searchedFacetList}"
                        + "&start={start}&limit={limit}&endpoint={endpoint}&portalId={portalId}&resultMetaIncludeList={resultMetaIncludeList}")]
    XosSearchResults Search(string query, string platform, string requestedFacetGroupCountList, string searchedFacetList, string searchedContentTypeList,
                                    int start, int limit, string endpoint, string portalId, string resultMetaIncludeList);

这是在http://localhost/DigitalREST/XosSearch.svc本地运行,以及我们的生产服务。使用URI模板的GET查询在浏览器中完全正常,http://localhost/DigitalREST/XosSearch.svc?wsdl似乎可以提供正确的元数据。

然后我进入了我的网络应用程序,添加了http://localhost/DigitalREST/XosSearch.svc?wsdl作为服务参考。然后我编写了以下代码来与服务进行交互:

        var binding = new BasicHttpBinding();
        var endpointAddr = new EndpointAddress("http://localhost/DigitalREST/XosSearch.svc?wsdl");
        var service = new XosSearchService.XosSearchClient(binding, endpointAddr);
        service.Open();

        // Run the search
        StartIndex = PageSize * SearchPageNum;
        SearchResults = service.Search(SearchQuery, Platform, null, FacetSearchString, Constants.VideoContentType, StartIndex, PageSize, Endpoint, PortalId, null);

        // Fill generic properties for outside reading
        StartIndex = (int)SearchResults.StartIndex;
        PageSize = SearchResults.PageSize;
        TotalResults = (int)SearchResults.TotalResults;

        service.Close();

调用service.Search()方法时,会发生以下异常:

  

http://localhost/DigitalREST/XosSearch.svc?wsdl没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。

内部例外是:

  

远程服务器返回错误:(404)Not Found。

即使我拿出?wsdl部分,我仍然会收到此错误。我做错了什么?

<小时/> 这是所要求的IndexArticles合同:

    [OperationContract]
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "IndexArticles/{platform}/{portalId}")]
    void IndexArticles(string platform, string portalId);

3 个答案:

答案 0 :(得分:2)

创建WebHttpBinding而不是link。如果找不到该类,请确保已引用System.ServiceModel.Web

WebHttpBinding binding = new WebHttpBinding()

您正在使用的当前绑定BasicHttpBinding正在尝试通过soap进行通信。

答案 1 :(得分:0)

之前我遇到过这样的问题,我所做的就是保存所有内容,关闭Visual Studio,然后在以管理员身份运行它时重新打开它(右键单击并选择以管理员身份运行),也许尝试一下。

答案 2 :(得分:0)

查看端点配置是有益的,但它可能是许多不同的东西。

  • 你有元数据吗?
  • 您是否添加了元数据的服务行为?
  • 您是否已将该行为配置添加到您的服务中?