我是MVC的新手(事实上,这是我的第一个任务)
因此,我在本地计算机上运行了一个良好的Web服务,功能正常
http://www.codetrials.local/wcf/UserServices.svc?wsdl
并且在我的MVC应用程序中,我像往常一样添加了一个服务引用,然后在我的Model.cs中我尝试了这个:
using (CodeTrials.UserServicesClient _client = new UserServicesClient())
{
UserWebsite = _client.GetUserWebsite(username);
}
但是当我尝试运行它时,我总是得到异常endpoint not found
。我可以从我的(不同的)asp.net项目访问它,它工作得很好,相同的代码和一切。经过一番挖掘,我发现this answer我将上面的代码修改为:
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://www.codetrials.local/wcf/UserServices.svc");
using (CodeTrials.UserServicesClient _client = new UserServicesClient(binding, address))
{
UserWebsite = _client.GetUserWebsite(username);
}
但现在,我收到了一个新例外:There was no endpoint listening at http://www.codetrials.local/wcf/UserServices.svc?wsdl that could accept the message
所以我在我的智慧结束。
I found a similar question但这不是我想要的。
你能指导我走正确的道路吗? 我做得不对吗? 我应该将Web服务的消耗从模型转移到控制器吗?
感谢。
编辑 - 这是我的配置文件system.serviceModel
部分。我只是将它从WCF client test gui tool粘贴到web.config中,因为它不是由visual studio生成的。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IUserServices" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.codetrials.local/wcf/UserServices.svc/wcf/UserServices.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IUserServices"
contract="IUserServices" name="BasicHttpBinding_IUserServices" />
</client>
</system.serviceModel>
答案 0 :(得分:1)
从评论中重新发布,因为它结果是答案。 :)原来,web.debug.config在这种情况下覆盖了web.config。
你确定它在正确的web.config中吗? VS应该在添加服务引用时自动创建它(至少对我来说)。一个问题是普通的MVC应用程序有两个web.config文件,默认情况下在Views文件夹中有第二个。除此之外,我不确定最新情况。
答案 1 :(得分:0)
您的代码显示您正在使用此网址:http://www.codetrials.local/wcf/UserServices.svc
来访问服务端点,但您的异常消息显示您实际上正在使用http://www.codetrials.local/wcf/UserServices.svc?wsdl
。
检查MVC app web.config文件中的serviceModel元素。如果需要在代码中配置WCF客户端,则从web.config文件中删除整个元素,这可能是错误URL的来源。如果您确实要从web.config文件配置WCF,请删除当前代码并使用以下两行创建客户端并调用该服务:
var _client = new UserServicesClient("BasicHttpBinding_IUserServices");
UserWebsite = _client.GetUserWebsite(username);
您的web.config serviceModel元素中存在类似以下内容的内容:
<system.serviceModel>
<client>
<endpoint
name="BasicHttpBinding_IUserServices"
address="http://www.codetrials.local/wcf/UserServices.svc"
binding="basicHttpBinding"
contract="IUserServices" >
</endpoint>
</client>
<!-- rest of element snipped -->
最后,你不应该在using语句中包装UserServicesClient实例,因为reasons outlined in this post. WCF是一个狡猾的野兽......
编辑: 根据您的配置更新,您的问题可能是服务URL是:
http://www.codetrials.local/wcf/UserServices.svc/wcf/UserServices.svc
wcf/UserServices.svc
似乎是重复的。