2016-05-11 7 views
0

私はまだWCFの背景がありません。だから私がこれまで行ってきたことは、研究だけに基づいています。私がしようとしているのはこれです。WCFを使用して別のプロジェクトの別のフォームに1つのWindowsアプリケーションフォームから値を取得する方法?

私はの3つのプロジェクトで解決策を作成しました。 2つのWindowsフォームアプリケーションと1つのWCFサービスアプリケーション

フォーム1には、テキストボックスとボタンがあります。更新ボタンがクリックされた場合、更新ボタンがクリックされると、テキストボックス内の値を他のフォームに反映させる必要があります。ここで私はこれまでやっていることです:をForm1

private void btn_update_Click(object sender, EventArgs e) 
    { 
     ServiceReference.SimulatorServiceClient client = new ServiceReference.SimulatorServiceClient(); 
     try 
     { 
      client.Open(); 
      client.SetSerialNumber(Convert.ToInt32(txt_serialnumber.Text));     
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (client.State == System.ServiceModel.CommunicationState.Opened) 
      { 
       //MessageBox.Show("Communication Closed"); 
       client.Close(); 
      } 
     } 

    } 

ISimulatorService.cs

[ServiceContract] 
public interface ISimulatorService 
{ 
    [OperationContract] 
    void SetSerialNumber(int value); 

    [OperationContract] 
    int GetSerialNumber(); 
} 

ISimulatorService.svc

public class Service1 : ISimulatorService 
{ 
    public int serial; 
    public string modelName; 

    public void SetSerialNumber(int value) 
    { 
     this.serial = value; 
    } 

    public int GetSerialNumber() 
    { 
     return serial; 
    } 
} 

更新]ボタンフォーム2

private void btn_update_Click(object sender, EventArgs e) 
    { 
     ServiceReference.SimulatorServiceClient client = new ServiceReference.SimulatorServiceClient(); 
     txt_serialnumber.Text = client.GetSerialNumber().ToString(); 
    } 

戻り値に

[更新]ボタンは常にゼロです。その値を他の形式で取得できるように、値を格納するために実装する必要があるのは何ですか?

答えて

0

お客様のserial変数は通話間では受け付けられません。サービスはSetSerialNumberに初めて電話をかけたときに有効になり、GetSerialNumberに電話をかけてもう一度閉じると、もう一度アクティブになります。短期間では、2つの異なるインスタンスになります。したがって、コールの間にデータを保持する必要があります。

データをディスクに保存する必要はありません。MemoryCacheなどを使用してください。ここでは短い抜粋です:

public class Service1 : ISimulatorService 
{ 
    private ObjectCache _cache = MemoryCache.Default; 
    private CacheItemPolicy policy = new CacheItemPolicy(); 

    public void SetSerialNumber(int value) 
    { 
     _cache.Set("serial", value, policy); 
    } 

    public int GetSerialNumber() 
    { 
     (int)_chache["serial"]; 
    } 
} 

あなたは、データが、ディスクuse a databaseにperistedする必要があります。

関連する問題