0

2 つの WCF サービスをマスター サーバー (サード パーティによって管理され、そこにはあまりアクセスできません) に 1 つと、ローカル サーバーにもう 1 つ持っています。基本的に、ローカル サービスが存在する理由は、マスターがサービスが(何らかの理由で)オフラインになり、マスター サービスが利用可能になるたびにデータをアップロードし直します。

クライアント アプリケーションがデータ (マスター サービス/ローカル サービス) をヒットする場所を透過的に保つために、ローカル サービスをプロキシとして作成しています。つまり、クライアント アプリケーションはローカル サービスのみを呼び出し、マスター サーバーの状態をチェックしてデータを取得/投稿します。オフラインの場合は、ローカル キャッシュを使用し、利用可能な場合はデータをサーバーにプッシュします。

現在、マスター サービスにはいくつかの複雑な DataContract があり (それらは大量です)、実際のデータ コントラクト属性ファイル (サード パーティによって管理されています) にアクセスできず、追加された参照 (SOAP ) は複雑な型をローカルに作成しますが、DataMembers/DataContracts の代わりに XML シリアライゼーション属性を使用すると、型をそのまま再利用できませんか?

回避策はありますか、それともサードパーティを経由するか、契約を作成する必要がありますか?

4

1 に答える 1

0

いくつか質問があります:-

  1. では、第三者によって管理されているとはどういう意味ですか? WCF サービスを提供/維持している別の組織であり、コードを持っていませんか?

  2. あなたはローカルサービスのようなラッパーですか?

何らかの方法でデータ コントラクトとサービス コントラクトを取得する場合は、同じデータ コントラクトを使用して同じサービス コントラクトを実装できるローカル サービスとして最適です。それに加えて、マスター サービスが稼働しているときにデータをプッシュ バックするために使用できる、もう 1 つのサービス コントラクトを作成できます。

以下の例を参照してください:-

public interface IMasterService
{
    TResponse PersistData(TRequestObject request);
}

public interface ILocalService
{
    TResponse PushDataInBatch(TRequestObject[] requestBatch);

    //We can add more methods here if required
}

public MasterService : IMasterService
{
    public TResponse PersistData(TRequestObject request) 
    {
        //persist data in Master DB
    }
}

public LocalService : IMasterService, ILocalService
{
    public TResponse PersistData(TRequestObject request) 
    {
        //persist data in local cache
    }

    public TResponse PushDataInBatch(TRequestObject[] requestBatch) 
    {
        //persist data in local cache
    }
}

上記の考えが役に立ったかどうかお知らせください。お気軽に詳細をお知らせください。詳細を確認いたします。


上記の実装は、ライブラリにアクセスできる場合のアプローチである可能性がありますが、アクセスできない場合は、MasterService のサービス参照を取得してデータを適切に永続化するオプションが 1 つしかありません。

LocalService のもう 1 つのクエリは、(ローカル データストアに) 永続化ロジックを複製していると想定していますか?

于 2013-01-07T16:11:54.753 に答える