2012-02-12 9 views
0

小テストテストプログラムは、顧客と各顧客に特別なポイントのバランスがあるストアをベースにしています。今のところ私は一定の数の顧客、例えば3人に集中したいと思っています。問題点私はそれらの顧客をどこに創り出し、サービスの機能からどのようにアクセスするのでしょうか?私はサービスのmain()の内部に顧客の配列を作成することを考えていたので、後でクライアントが利用できるようになりましたが、それは良い考えですか? WCFに非常に新鮮で、そのようなものを実装する方法を示す例は見つかりませんでした。カスタムクラスオブジェクトにアクセスしてWCFサービスからデータを変更する方法は?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 
using System.Runtime.Serialization; 
using System.ServiceModel.Description; 

namespace StoreService 
{ 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      Uri baseAddress = new Uri("http://localhost:6112/StoreService"); 
      ServiceHost host = new ServiceHost(typeof(Store), baseAddress); 
      try 
      { 
       host.AddServiceEndpoint(typeof(IStore), new WSHttpBinding(), "Store"); 
       ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
       smb.HttpGetEnabled = true; 
       host.Description.Behaviors.Add(smb); 
       Console.WriteLine("The service is ready."); 
       Console.WriteLine("Press <ENTER> to terminate the service."); 
       Console.WriteLine(); 
       Console.ReadLine(); 
       host.Close(); 

      } 
      catch (CommunicationException ce) 
      { 
       Console.WriteLine("An exception occured: {0}", ce.Message); 
       host.Abort(); 
      } 
     } 
    } 

    [ServiceContract(Namespace="http://StoreService")] 
    public interface IStore 
    { 
     [OperationContract] 
     void AddPoints(string accNum, double points); 

     [OperationContract] 
     void SubtractPoints(string accNum, double points); 

     [OperationContract] 
     int CustomerPoints(string accNum); 
    } 

    [DataContract] 
    public class Customer 
    { 
     private string accountNumber; 
     private string name; 
     private double points; 

     [DataMember] 
     public int AccountNumber 
     { 
      get { return accountNumber; } 
      set { accountNumber = value; } 
     } 

     [DataMember] 
     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     [DataMember] 
     public int Points 
     { 
      get { return points; } 
      set { points = value; } 
     } 
    } 


    public class Store : IStore 
    { 
     public void AddPoints(string accNum, double points) 
     { 
      //Add points logic 
     } 

     public void SubtractPoints(string accNum, double points); 
     { 
      //Substract points logic 
     } 

     public int CustomerPoints(string accNum) 
     { 
      //Show points 
     } 
    } 
} 

答えて

2

あなたのサービスへのインターフェイスと、サービスによって公開されている各メソッドのコードが必要になります。

// First the Interface, things in here decorated with the Operation contract gets exposed, things with serializable are available to the client 

namespace MyService 
{ 
    [ServiceContract] 
    public interface ICustomer 
    { 

     [OperationContract] 
     int GetBalance(Guid CustomerId); 
    } 

    [Serializable] 
    public class Customer 
    { 
     public Guid Id; 
     public int Balance; 
    } 
} 




// 2nd class file is the code mapping to the interface 
namespace MyService 
{ 
    private List<Customer> Customers = new List<Customer>(); 
    public class MyService : ICustomer 
    { 
     public int GetBalance(Guid CustomerId) 
     { 
      foreach(Customer c in Customers) 
      { 
       if(c.Id == CustomerId) 
       { 
        return c.Balance; 
       } 
      } 
     } 
    } 
} 
+0

うーん:

これはテストされていない、私の頭の上からで、マイクロソフトの例は、2つの新しいクラスを追加し、あなたに例えばブライアン

によって投稿このようなものが表示されます。興味深いですね。お客様のIDにはGuidを使用する必要がありますか?私は私のソースコードごとに文字列を使う予定でした。 – Bob

+1

こんにちはボブ、まったくではなく、あなたの顧客IDに好きなものを使うことができます。これは単なる例に過ぎず、クラスを少し深く見ることができます。 – Jeggs

+0

ありがとう! – Bob

0

まず、here's MSからWCFの良いサンプルの束あなたが始めるために。このデモウェアでは、すべての「テスト」データを何らかのコレクションに生成し、それをあなたのサービスで使いこなすためのメソッドを作成する方法を見ていきます。一度あなたのコンセプトに慣れると、データストアとしてデータベースを使用することになります。 WCFサービスの初期化については、hereも参照してください。

この類似点も見てくださいpost

関連する問題