我有一个客户端应用和服务器应用。 客户端调用wcf服务并传递机器信息 到服务器,根据机器名称,服务器在客户端回调一个wcf服务。 所以为了实现这一点,我只是改变了EndPointAddress,但它正在抛出 NoEndPointFoundException,我该如何修复它,下面是代码: public void RegisterTasks(MachineConfig machineInfo) { string add = exeProxy.Endpoint.Address.Uri.Scheme +“://”+ machineInfo.MachineName.Trim()+“/” + exeProxy.Endpoint.Address.Uri.Segments [1];
Uri uri = new Uri(add);
EndpointAddress eadd = new EndpointAddress(add);
WSHttpBinding whttpBinding = new WSHttpBinding(SecurityMode.None);
//ServiceReference1.ExecuteTaskClient newProxy = new ExecuteTaskClient(whttpBinding , eadd);
//EndpointAddress endPointAddress = ;
exeProxy.Endpoint.Address = eadd;
//exeProxy.Endpoint.Binding = new System.ServiceModel.BasicHttpBinding("httpBinding");
// we just execute the task by
// calling the wcf service on client side
foreach (Task task in machineInfo.Tasks)
{
exeProxy.ExecuteTask(task.TaskID);
// newProxy.ExecuteTask(task.TaskID);
}
}
答案 0 :(得分:1)
我假设你得到的是EndpointNotFoundException而不是NoEndPointFoundException。我找不到对NoEndPointFoundException的引用。
http://msdn.microsoft.com/en-us/library/system.servicemodel.endpointnotfoundexception.aspx
这是说客户端找不到服务器。在您的情况下,服务器正在尝试回调客户端,因此角色会反转。
有两件事可能是错的:
希望这有帮助
西拉
答案 1 :(得分:1)
我的第一印象是你的设计应该重新考虑。每当我看到一个巧妙的(阅读:奇怪的)解决方案时,我都会看到一大堆头脑正在制作中。
首先,写下你试图在婴儿中说实话的内容:“我希望在服务器有新数据时联系客户。”然后考虑如何使用更传统的技术实现它。
检查双工绑定 - 如果你没有扩展到成千上万的客户端,那么轮询一个有状态的单例并不总是一个坏主意 - 事实上,我敢打赌它比你当前的设计更好。
但是,为了解决您当前的设计问题,我将使用MEX端点(mexHttpBinding)设置客户端(将成为服务器),然后将其设置为关闭以便侦听,然后使用VS(空项目或来自服务器项目)尝试通过添加服务引用并提供本地计算机名称等连接到客户端(服务器)。仅此一项可能会出现问题。然后添加后,您可以使用autogen app.config来了解您需要的设置。
另外,您是否考虑过如果服务器没有设置代理类,服务器将如何调用客户端?
这听起来像是在为自己的背部制作一根杆。