私はプロキシを生成したクライアントを持っているし、すべてが良いですWCF:なぜサーバーインターフェイスのリファクタリングがクライアントプロキシ契約を破るのですか?
public class MyWebServices : IMyWebServices
{
pubic bool MethodA(){...}
pubic bool MethodB(){...}
}
...
[ServiceContract]
public interface IMyWebServices
{
[OperationContract]
bool MethodA();
[OperationContract]
bool MethodB();
}
ようなインターフェイスのものを使用して、既存のWCF Webサービス、次に実装を持っています。
以降、このサービスの番号または操作が増加します。だから実装では、私は他のクラスにすべてのコードを因数分解し、メインクラスに注入します。
[ServiceContract]
public interface IMyWebServices : IServices1, IServices2
{
}
[ServiceContract]
public interface IServices1
{
[OperationContract]
bool MethodA();
}
[ServiceContract]
public interface IServices2
{
[OperationContract]
bool MethodB();
}
public class MyWebServices : IMyWebServices
{
private IServices1 _s1;
private IServices2 _s2;
public MyWebServices(IServices1, s1, IServices2, s2)
{
_s1 = s1;
_s2 = s2;
}
pubic bool MethodA()
{
return _s1.MethodA()
}
pubic bool MethodB()
{
return _s2.MethodB()
}
}
問題は今、新たなサービスが展開されている場合は、既存の展開クライアント(そのプロキシなしの再生は)今エラーが出るということです。イベントは全く同じですが、私は
の... EndpointDispatcherでContractFilterの不一致が原因で受信者で処理できません。これは、契約の不一致(送信者と受信者の間の不一致)または送信者と受信者の間のバインディング/セキュリティの不一致のいずれかが原因である可能性があります。送信者と受信者が同じ契約と同じバインディング(セキュリティ要件、たとえばメッセージ、トランスポート、なしなど)を持っていることを確認します。
したがって、サーバーサイドインターフェイスのリファクタリングはできません。
これは将来のリファクタリングのために何か方法がありますか、これは単に私たちがWCFを使用して生きなければならないものなのです(既存のクライアントのプロキシを再確認する必要があります)。
事前情報ありがとうございます。
プロキシ再生の前後に自動生成されたコードの内容を調べてみてください。 – apocalypse
契約は*です。 –