我在我的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);
答案 0 :(得分:2)
创建WebHttpBinding而不是link。如果找不到该类,请确保已引用System.ServiceModel.Web
WebHttpBinding binding = new WebHttpBinding()
您正在使用的当前绑定BasicHttpBinding正在尝试通过soap进行通信。
答案 1 :(得分:0)
之前我遇到过这样的问题,我所做的就是保存所有内容,关闭Visual Studio,然后在以管理员身份运行它时重新打开它(右键单击并选择以管理员身份运行),也许尝试一下。
答案 2 :(得分:0)
查看端点配置是有益的,但它可能是许多不同的东西。