简单的Wcf服务不会导致端点异常
本文关键字:端点 异常 Wcf 服务 简单 | 更新日期: 2023-09-27 18:07:15
我正在学习wcf,我试图创建一个wcf服务,但我一直得到这个异常:
未处理异常:System.ServiceModel.EndpointNotFoundException: There was no在
http://localhost:8733/Person/
侦听可以接受消息的端点通用电气。这通常是由不正确的地址或SOAP操作引起的。看到InnerExcept如果有的话,请参阅更多细节。--> system.net.webeexception: cannot to conne--> System.Net.Sockets.SocketException: No connection因为目标机器主动拒绝了它127.0.0.1:8733
我首先创建了一个WCF服务库。我在这里定义了我的服务契约和数据契约。并配置端点如下所示:
<service name="SelfHosting.PersonContract">
<endpoint address="" binding="basicHttpBinding" contract="SelfHosting.IPersonContract">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Person/" />
</baseAddresses>
</host>
</service>
这两个端点已经添加,我只是根据需要配置它们。我不确定mex端点是用来做什么的,所以我希望有人能告诉我。
然后,我创建了一个控制台应用程序,并添加了对该服务的引用。我已经初始化了服务的一个实例,然后我尝试调用它:static PersonContractClient client = new PersonContractClient();
static void Main(string[] args)
{
var persons = client.GetPersons();
foreach (var personData in persons)
{
Console.WriteLine(personData.Name);
Console.WriteLine(personData.Email);
}
}
我没有在客户端上设置任何端点,因为据我所知,当您向服务添加引用时,它们会自动添加。这是在我添加引用后添加的:
<endpoint address="http://localhost:8733/Person/" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IPersonContract" contract="PersonNamespace.IPersonContract"
name="BasicHttpBinding_IPersonContract" />
我的解决方案还包含另一个具有数据的项目,我使用实体框架获得数据。我不知道这是否与问题有关。
我在这里做错了什么?
当我尝试在控制台应用程序中使用self host创建双工wcf通信时,我遇到了类似的问题。下面这个例子http://adamprescott.net/2012/08/15/a-simple-wcf-service-callback-example/说明得很清楚。通常会得到错误
"未处理的异常:System.ServiceModel.EndpointNotFoundException:没有端点监听http://localhost:8733/Person/可以接受这个消息。这通常是由不正确的地址或SOAP操作引起的。有关详细信息,请参阅InnerExcept离子(如果存在)。--> System.Net.Sockets.SocketException: No connection c could be made因为目标机器主动拒绝它127.0.0.1:8733"
在尝试在客户端控制台应用程序中发现服务引用之前,您需要通过右键单击文件夹位置中的.exe来启动服务的可执行文件(.exe)>复制服务app.config中baseaddress中的uri并粘贴在添加服务引用对话框中,然后单击确定…这就解决了问题。我希望这对其他人有帮助,因为这个问题有点老了。
用终端的ip地址代替url中的'localhost'