2011-08-19 42 views
0

hiii 我是WCF的新手,我在控制台应用程序中编写了代码。 我创建这样的Windows窗体应用程序中的WCF主机

[ServiceContract] 
public interface IHelloService 
{ 
    [OperationContract] 
    void SayHello(string msg); 
} 

服务和定义函数

public class HelloService: IHelloService 
{ 
    public void SayHello(string msg) 
    { 
     Console.WriteLine("I rec message : " + msg); 

    } 
} 

,我开始从主程序文件服务

static void Main(string[] args) 
{ 
     Console.WriteLine("******* Service Console *******"); 
     using(ServiceHost host = new ServiceHost(typeof(HelloWcfServiceLibrary.HelloService))) 
     { 

      host.AddServiceEndpoint(typeof(IHelloService), new NetTcpBinding(), "net.tcp://localhost:9000/HelloWcfService"); 
      host.Open(); 
      Console.Read(); 
     } 
} 

,并在客户端的代码是

static void Main(string[] args) 
{ 
     IHelloService proxy = ChannelFactory<IHelloService>.CreateChannel(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:9000/HelloWcfService")); 
     string msg; 
     while (true) 
     { 
      msg = Console.ReadLine(); 
      msg = proxy.SayHello(msg); 
      Console.WriteLine("Server returned " + msg); 
     } 
    } 

它工作正常,但我想在Windows窗体应用程序中做同样的事情,并显示接收到的数据我richtextbox,但我不知道如何做到这一点。 请有人帮我

回答

0

这和您在控制台应用程序中所做的一样。您可以在Load方法中启动ServiceHost,但一个区别是RichTextbox只能在GUI线程中访问,因此您可能必须将GUI SynchronizationContext保存在某处,并且当您想要将某些内容输出到该富文本框时,您需要调用Post方法或发送SynchronizationContext,如:


public class HelloService: IHelloService {  
private SynchronizationContext context; 
private RichTextbox textbox; 
public void SayHello(string msg) 
{  
context.Post((obj) => textbox.Add("I rec message : " + msg)); 
} 
} 

注意:这只是显示一个示例,它可能无法正常工作。