0

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フォームアプリケーションで同じことを行い、受信したデータをrichtextboxに表示したいのですが、その方法がわかりません。誰か助けてください

4

1 に答える 1

0

コンソール アプリケーションで行ったこととまったく同じです。Load メソッドで ServiceHost を開始できますが、1 つの違いは、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));
}
}

注: これはサンプルを示しているだけで、動作しない場合があります。

于 2011-08-19T01:15:20.653 に答える