私は頭を悩ませている奇妙な問題を抱えています。
1 つのプロジェクトで次のクラスを定義しています。
public abstract class AbstractUnitModel {
public void executeRemoteModel(){}
}
//this class also implements a seperate interface, but I dont think that is the issue
public class BlastFurnaceUnitModel : AbstractUnitModel, IUnitModel {}
今、このようなことを試してみると、期待どおりに動作します:
class Class1
{
public void method1() {
BlastFurnaceUnitModel b = new BlastFurnaceUnitModel();
method2(b);
}
public void method2(AbstractUnitModel a) {}
}
これで、Web メソッドを公開する別のプロジェクトができました。このメソッドは AbstractUnitModel を取得してリモートで実行し、結果をクライアントに返します。したがって、サーバーには次のものがあります。
[WebMethod]
public AbstractUnitModel remotelyExecuteUnitModel(UnitModelWrapperInterface.AbstractUnitModel unitModel)
{
unitModel.executeRemoteModel();
return unitModel;
}
そして、クライアントにはこれがあります:
public void remoteExecution() {
var unitModelWebService = new UnitModelRemoteServer.RemoteModelExecutionWebService();
unitModelWebService.remotelyExecuteUnitModelCompleted += new UnitModelRemoteServer.remotelyExecuteUnitModelCompletedEventHandler(remoteExecutionCompleted);
unitModelWebService.remotelyExecuteUnitModelAsync(this.remoteBF);
}
しかし、私のプロジェクトはコンパイルされず、次のエラーが発生 します。
エラー 110 引数 '1': 'UnitModelWrapperInterface.BlastFurnaceUnitModel' から 'CalibrationClient.UnitModelRemoteServer.AbstractUnitModel' に変換できません
なぜこれが起こっているのかわかりません。サーバー プロジェクトには、AbstractUnitModel が定義されている名前空間への参照があります。少しおかしいと思ったのは、UnitModelWrapperInterface ではなく「CalibrationClient」名前空間の AbstractUnitModel を使用していることだけです。VS がクライアントで Web サービスのプロキシを生成すると、AbstractUnitModel の部分的な抽象実装が作成されるようです。これが私の問題の原因ですか?もしそうなら、どうすればそれを修正できますか?
解決策の編集: 指摘したように、クライアントはネットワーク経由で送信される可能性のあるすべてのクラスについて知る必要があります。生成されたプロキシ クラスを削除し、共通ライブラリを参照することで、これを解決しました。理想的ではありませんが、この状況では十分です。