none
WCF如何访问宿主的数据? RRS feed

  • 问题

  • 请帮我看看是设计问题还是什么。

    情况是这样:

    我有一个winform程序,里面有一些控件,其中有一个listbox,这个里面的数据来自数据库,现在需要通过某种方法,输出给另一个程序,(另一个程序不想使用WIN32API来访问)。

    原来是使用SOCKET,但两个程序只在一台电脑里运行,用SOCKET,好象有点小题大做了。于是想改成WCF,net.pipe的方式。

    我现在做了以下工作:

    写了契约IServer1 接口声明 List<String> getData() ,并写了服务实现MyServer

    现在的问题是:

    用WINFORM做为宿主,在MyServer运行时,他的getData()方法如何从winform(宿主)中取listbox数据呢?

    谢谢!

     

     

     

    • 已编辑 hychx 2011年3月27日 17:38 字写错了
    2011年3月27日 17:36

答案

全部回复

  •  getData() 属于服务方法,MyServer托管在什么地方?单独的宿主进程?

    listbox属于Winform,应该是UI线程执行。

    使用的NetNamedPipeBinding 绑定,

    这里理解,无非是在Winfrom 如何跨进程 和另外一个进程通信的问题。

    Winfrom 这边要提供一个服务,基于NetNamedPipeBinding

    客户端就是MyServer,在 getData() 调用Winform提供的服务,获取listbox数据,

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年3月28日 5:02
    版主
  • 最简单的方法,将你的listbox变量作为winform的public属性,然后你的Service直接调用listbox取数据。

    2011年3月28日 5:03
  • 我要实现的功能是这样的:

    程序A,程序B

    A程序以已经实现了很多的功能,

    现在有B程序 需要读取A程序窗体中listbox中的数据。

    我就想在A程序中提供一个类拟webServer这样的功能,

    这样B程序 中的代码就简单得多了,

    当然,如果我把原来A程序中的DAL,BLL,SecurityFw还有这样的DLL

    再放到B程序中,也能实现。可样下来,维护就困难了。

    那还不如用Socket来实现(原本就觉得SCOKET已经是杀鸡用牛刀了)

     

    • 已编辑 hychx 2011年3月28日 5:20 缺少字
    2011年3月28日 5:19
  • 我对wcf才刚了解。

    大致情况可能是这样,

    写一个接口,作为C,S端的通讯基础,

    再写上面接口的实现的服务类,用于运行时。

    再写一个给服务类运行的环境(承载的服务类的东西,也叫宿主吧)

    不知道这样理解是否正确?

     

    2011年3月28日 5:28
  •  getData() 属于服务方法,MyServer托管在什么地方?单独的宿主进程?

    listbox属于Winform,应该是UI线程执行。

    使用的NetNamedPipeBinding 绑定,

    这里理解,无非是在Winfrom 如何跨进程 和另外一个进程通信的问题。

    Winfrom 这边要提供一个服务,基于NetNamedPipeBinding

    客户端就是MyServer,在 getData() 调用Winform提供的服务,获取listbox数据,

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛
    Windows Azure中文技术论坛

    谢谢。

    MyServer托管在什么地方?

    MyServer就是实现了契约的服务类,GetData()就是MyServer的一个方法,来自接口(契约)

    运行在winForm里。

    你的理解是正确的。我就是需要实现A,B两个程序的访问。不知道这样选择是否正确,还是会有其他方式更适和我这样的情况?

     

    2011年3月28日 5:37
  • 可以的,不过这属于线程之间通信,可以使用NetPipe绑定。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    • 已标记为答案 Mog Liang 2011年4月1日 9:47
    2011年3月29日 15:26
    版主