私は新しいですが、wcf に関する記事を読んでいると、ServcieContrcat
を変更すると、サービス側だけでなくクライアント側も変更する必要があり、管理が非常に難しいことがわかりました。
Example 1:
開発者は、次の関数を使用して、注文処理用の WCF サービスを作成する必要があります。GetOrderById, GetOrdersByStatus, SaveOrder
ServiceContract は次のようになります。
[ServiceContract]
public interface IOrderService
{
[OperationContract]
Order GetOrderById(int orderId);
[OperationContract]
List<Order> GetOrdersByStatus(OrderStatus orderStatus);
[OperationContract]
void SaveOrder(Order order)
}
たとえば、数か月後、プロジェクト マネージャーは次のように言いますDeleteOrderById, GetOrdersByCustomerId
。GetOrdersByStatus
GetOrdersByStatusAndCustomerId
開発者は、ServiceContrcat
クライアントを更新して更新する必要があります。ご覧のとおり、変更ServiceContrcat
は非常に困難です。
そのため、機能を拡張したり、何らかの変更を加えたりしても問題を引き起こさないwcfサービスを開発するための最良のガイダンスを探していますが、クライアントエンドは問題に直面しません。ありがとう
一人の男が同じ状況で前に答えた
これは私がやったことです: 私の 30 以上の関数 (およびリストはどんどん大きくなります) はすべて、入力パラメーターと出力パラメーターの両方として、データ型として文字列、int、bytes() を取り、マスターの単一のエンドポイントと受信する関数を作成しました。入力パラメータであり、単一の単純なクラスを出力として送り返します。HostInterface と呼ばれるこのクラスには、文字列 (すべての文字列と int をカプセル化するために使用) と byte() 配列 (すべてのバイナリを詰め込む) の 2 つのパラメーターのみが含まれます。
そのため、クライアントが 1 つの文字列パラメーターだけで Ping() のような単純なものを呼び出している場合でも、ResumeDownload() のように 5 つの文字列、2 つの int と 1 つのバイト配列を使用して複雑なものを呼び出している場合でも、これらのパラメーターはすべて HostInterface クラス (文字列) にカプセル化されます。 int を 1 つの String パラメータ (XML として) に変換し、バイトを byte フィールドに変換します。
彼の答えに感謝しますが、それを実装する方法が本当にわかりません。誰かがこのURLにアクセスすると、クライアントに影響を与えないWCFサービス契約を変更する方法は?
それから彼が言ったことを知っています。
後でサービス コントラクトの機能を拡張した場合に、サービスを利用するクライアントが問題に直面しないように、サービス コントラクトを設計する方法を視覚化するのに役立つ小さな完全な wcf サービス コードを探しています。
この状況を解決するための他の可能なガイドラインを教えてください。ありがとう