如何从同一 WPF 应用程序托管的 WCF 服务调用 WPF 应用程序中的方法?

Posted

技术标签:

【中文标题】如何从同一 WPF 应用程序托管的 WCF 服务调用 WPF 应用程序中的方法?【英文标题】:How to call a method in WPF application from a WCF Service hosted by the same WPF application? 【发布时间】:2014-08-10 14:50:50 【问题描述】:

我创建了一个托管在 WPF 应用程序中的 WCF 服务。一切正常。我的客户可以毫无问题地访问 WCF 服务。

现在,当客户端调用我的服务中的方法时,例如:SetData(MyDataObject data),我希望该方法将“数据”对象发送回 WPF 主机进行处理。

我怎么把它连接起来???

我的服务托管在 WPF 应用程序中:

host = new ServiceHost(typeof(WCFTestService.Service1), new Uri("http://localhost:8733/WCFTestService/"));

// Service host is opened on the UI thread
host.AddServiceEndpoint(typeof(WCFTestService.IService1), new BasicHttpBinding(), "");

// Enable metadata exchange
ServiceMetadataBehavior smb = new ServiceMetadataBehavior()  HttpGetEnabled = true ;
host.Description.Behaviors.Add(smb);

// Enable exeption details
ServiceDebugBehavior sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>();
sdb.IncludeExceptionDetailInFaults = true;

host.Open();

我的 WCF 服务方法:

public bool SetData(MyDataObject data)

   //HOW DO I get MyDataObject to the WPF Host???
   // something like: host.UpdateData(data) <-- callback method???
   return true;

【问题讨论】:

【参考方案1】:

我跑题了,但是表示层和服务层如此紧密耦合是否有特殊原因?我认为您可以将 MyDataObject 的内容添加到您创建的数据传输对象中,或者持久化 MyDataObject(可能是暂时的),然后让 WPF 应用程序/主机通过同一 wcf 服务公开的方法调用来访问它。根据您提供的数据,我可能会这样做。

【讨论】:

以上是关于如何从同一 WPF 应用程序托管的 WCF 服务调用 WPF 应用程序中的方法?的主要内容,如果未能解决你的问题,请参考以下文章

在Windows服务的WPF应用程序中托管的命名管道上使用WCF服务

WPF 应用程序托管 WCF 访问冲突

在 WPF 应用程序中托管 WCF Web 服务

使用 Windows 身份验证的 IIS 托管 WCF 服务和 SQL 查询

自托管 WCF 服务和 basicHttpBinding:绑定不提供表示调用者的 Windows 标识

从主机 WinForms 程序访问自托管 WCF 服务