REST サーバーに使用されるインターフェイスを含む同じ DLL を参照するサーバー/クライアント アプリケーションとWebChannelFactory
、Web サーバーを参照するためのサーバー/クライアント アプリケーションがある場合、サーバー インターフェイスが取得および更新されると、レガシー クライアントはどうなりますか? たとえば、アプリケーションのバージョン 1 が次のインターフェイスでプッシュされるとします。
[ServiceContract]
public interface ISampleInterface
{
[OperationContract]
[WebInvoke(UriTemplate = "/PutDevice", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
void PutDevice(Device device);
}
[DataContract(Namespace = "")]
public class Device
{
[DataMember]
public Guid id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
} // End of Device
これは、REST サービスがコントラクトとして使用するものであり、エージェントには次のようなコードがあります。
WebChannelFactory<ISampleInterface> client = new WebChannelFactory<IGridVisionService>(new Uri(targetHost));
ISampleInterface sampleInterface = client.CreateChannel();
sampleInterface.PutDevice(new Device() { id = Guid.Empty(), Name = "Test Device", Description = "Test Device Description" });
そのため、クライアント アプリケーションは既に数百台のコンピューターに展開されていますが、このバージョンでは、クライアントにもドメインを送信してもらいたいことがわかっているため、デバイス データ コントラクトを次のように変更します。
[DataContract(Namespace = "")]
public class Device
{
[DataMember]
public Guid id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Domain { get; set; }
[DataMember]
public string Description { get; set; }
} // End of Device
サーバーを更新するのは簡単ですが、今ではドメインについて知らない何百ものエージェントが存在します。この状況に対処する適切な方法は何ですか? 私の唯一の考えは、DataContract を使用するのではなく、XElement
手動で解析できるものを使用することでした。次に、ドメインが見つからない場合に対処するためにサーバーにログインを追加しますが、これはずさんなようです。私が見落としているより良い解決策はありますか?