如何在WCF中更改EndPoint地址?

时间:2009-07-03 09:49:19

标签: wcf

我有一个客户端应用和服务器应用。 客户端调用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);
        }

    }

2 个答案:

答案 0 :(得分:1)

我假设你得到的是EndpointNotFoundException而不是NoEndPointFoundException。我找不到对NoEndPointFoundException的引用。

http://msdn.microsoft.com/en-us/library/system.servicemodel.endpointnotfoundexception.aspx

这是说客户端找不到服务器。在您的情况下,服务器正在尝试回调客户端,因此角色会反转。

有两件事可能是错的:

  • 变量“add”中的url不正确(尝试记录该值)
  • 客户端的wcf服务没有侦听正确的url(尝试将url放在浏览器中)

希望这有帮助

西拉

答案 1 :(得分:1)

我的第一印象是你的设计应该重新考虑。每当我看到一个巧妙的(阅读:奇怪的)解决方案时,我都会看到一大堆头脑正在制作中。

首先,写下你试图在婴儿中说实话的内容:“我希望在服务器有新数据时联系客户。”然后考虑如何使用更传统的技术实现它。

检查双工绑定 - 如果你没有扩展到成千上万的客户端,那么轮询一个有状态的单例并不总是一个坏主意 - 事实上,我敢打赌它比你当前的设计更好。

但是,为了解决您当前的设计问题,我将使用MEX端点(mexHttpBinding)设置客户端(将成为服务器),然后将其设置为关闭以便侦听,然后使用VS(空项目或来自服务器项目)尝试通过添加服务引用并提供本地计算机名称等连接到客户端(服务器)。仅此一项可能会出现问题。然后添加后,您可以使用autogen app.config来了解您需要的设置。

另外,您是否考虑过如果服务器没有设置代理类,服务器将如何调用客户端?

这听起来像是在为自己的背部制作一根杆。