Хост WCF в приложении Windows Form - PullRequest
0 голосов
/ 19 августа 2011

hiii Я новичок в 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 Form Application и показать полученные данные в richtextbox, но я не знаю, как это сделать.Пожалуйста, кто-нибудь, помогите мне

1 Ответ

0 голосов
/ 19 августа 2011

Это то же самое, что вы делали в консольном приложении.Вы можете запустить ServiceHost в методе Load, но одно отличие состоит в том, что 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));
}
}

Примечание: это просто показывает пример, он может не работать.

...