2012-04-29 15 views
0

2つのアプリケーション間で共有する必要があるトランザクションを定義するクラスがあります。どちらもこのライブラリへの参照を持っているし、データ型としてクラスを使用することができますが、その方法のうちのいずれかを呼び出すことはできません。WCFサービスライブラリにクラスを追加する

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using ServerLibrary.MarketService; 

namespace ServerLibrary 
{ 
    [ServiceContract] 
    public interface IService 
    { 
     [OperationContract] 
     string GetData(int value); 

     [OperationContract] 
     CompositeType GetDataUsingDataContract(CompositeType composite); 

     [OperationContract] 
     bool ProcessTransaction(Transaction transaction); 
    } 

    [DataContract] 
    public class CompositeType 
    { 
     bool boolValue = true; 
     string stringValue = "Hello "; 

     [DataMember] 
     public bool BoolValue 
     { 
      get { return boolValue; } 
      set { boolValue = value; } 
     } 

     [DataMember] 
     public string StringValue 
     { 
      get { return stringValue; } 
      set { stringValue = value; } 
     } 
    } 

    // Transaction class to encapsulate products and checkout data 
    [DataContract] 
    public class Transaction 
    { 
     [DataMember] 
     public int checkoutID; 
     [DataMember] 
     public DateTime time; 
     [DataMember] 
     public List<Product> products; 
     [DataMember] 
     public double totalPrice; 
     [DataMember] 
     public bool complete; 

     public void Start(int ID) 
     { 
      checkoutID = ID; 
      products = new List<Product>(); 
      complete = false; 
     } 

     public void Complete() 
     { 
      time = DateTime.Now; 
      complete = true; 
     } 
    } 
} 

は私が間違って何をやっているの?

[更新]私は残りのサービスを逃しました。

ありがとうございました。

+0

Is製品にもDataContract属性が設定されていますか? –

+0

製品は、MarketServiceという別のサービス参照のクラスです。 – Lee

+0

サービスをホストするときに何らかのエラーが表示されますか?何が問題ですか? –

答えて

2

クライアントとサーバーの両方から同じ.NETタイプを使用するには、クライアントとホストの両方が使用する共有アセンブリにデータコントラクトクラスを追加する必要があります。ホストが起動して稼動しているときに、サービス参照の追加を行うと、既存のアセンブリからの再利用タイプを示すチェックボックスが表示されます。

これにより、WCFは、オブジェクトと期待しているメソッドとデータを再作成します。

+0

クライアントとサーバーが共有クラスを持つローカルDLLを参照するのは好きですか? – Lee

+0

ええ、彼らは両方とも共有契約DLLを参照し、クライアント側でサービス参照を追加するときに、既存のタイプの再利用をチェックするようにしてください。 –

+0

OK thanks。私はこれを行うことを考えましたが、WCFを使用する方法でオブジェクトを破ったと思っていましたが、これが方法であれば、素晴らしいです! – Lee

関連する問題