2013-04-07 49 views
0

我在这里学习WCF http://msdn.microsoft.com/ru-ru/library/bb386386.aspx并且我成功做了测试服务步骤。但是在访问服务第一步遇到问题。它建立没有任何错误,但是当我试着写不便向为textLabel空间,并按下按钮1,我得到了错误的button1_Click功能,即 ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();创建和访问WCF服务。 Visual studio 2012给出了错误

错误消息

找不到默认的终结点元素在服务模型客户端配置部分引用合同>'ServiceReference1.IService1'。这可能是因为没有为您的应用程序找到配置文件>>,或者因为在客户端元素中找不到匹配此合同的终点元素。

我发现在app.project文件

<endpoint address="http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService11" 
      contract="ServiceReference1.IService1" name="BasicHttpBinding_IService11" /> 

我真的100%确定这样的代码,该代码是没有任何错误,因为我是从上述网站复制它没有任何修改。所以我会很高兴听到你的假设如何解决这个问题。

+0

“如果您正在调用类库中的服务并从另一个项目调用类库,则会出现此错误。”在这里,我发现几乎相同的问题http://stackoverflow.com/questions/352654/could-not-find-default-endpoint-element。 – Rocketq 2013-04-07 13:03:41

回答

2

构建客户端时,应指定端点的name

using (var client = new ServiceReference1.Service1Client("BasicHttpBinding_IService11")) 
{ 
    client.SomeMethod(); 
} 

或使用*如果你有在配置文件只有一个端点:

using (var client = new ServiceReference1.Service1Client("*")) 
{ 
    client.SomeMethod(); 
} 

您需要的原因指定名称是因为对于配置文件中的相同服务,您可以有多个端点(例如具有不同的绑定),并且如果您未指定名称,则框架将不知道您要调用哪个端点。

另请注意,我如何将IDisposable客户端包装在using声明中,以确保在您完成对其的处理后妥善处理。

+0

感谢您的关注,但我不明白我应该在哪里编写关于端点的规范。无论如何,我可以尝试再次完成这些任务。 – Rocketq 2013-04-10 20:55:52

+1

你应该在你实例化代理的地方这样做(在'button1_Click'中)。 – 2013-04-11 05:45:04

+0

对WCF客户端使用'using'语句是不好的做法,因为它不会正确处理客户端。请参阅[避免使用语句的问题](http://msdn.microsoft.com/zh-cn/library/aa355056.aspx)。 – Tim 2013-10-06 20:29:34