gpt4 book ai didi

c# - 将派生类传递给采用抽象类型的 Web 服务方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:02 25 4
gpt4 key购买 nike

我有一个奇怪的问题困扰着我。

我在单个项目中定义了以下类:

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);
}

但我的项目无法编译,并且出现以下错误:错误 109 “CalibrationClient.UnitModelRemoteServer.RemoteModelExecutionWebService.remotelyExecuteUnitModelAsync(CalibrationClient.UnitModelRemoteServer.AbstractUnitModel)”的最佳重载方法匹配有一些无效参数

错误 110 参数“1”:无法从“UnitModelWrapperInterface.BlastFurnaceUnitModel”转换为“CalibrationClient.UnitModelRemoteServer.AbstractUnitModel”

我不明白为什么会这样。我在服务器项目中引用了定义 AbstractUnitModel 的 namespace 。唯一让我觉得有点滑稽的是,它使用的是“CalibrationClient”命名空间中的 AbstractUnitModel,而不是 UnitModelWrapperInterface。似乎当 VS 在客户端为 Web 服务生成代理时,它创建了 AbstractUnitModel 的部分抽象实现。这是我问题的根源吗?如果是这样,我该如何解决?

编辑解决方案:如前所述,客户端需要了解所有可以通过线路发送的类。我最终通过删除生成的代理类并引用公共(public)库来解决这个问题。在这种情况下不理想但足够好。

最佳答案

发生这种情况是因为 WSDL 工具创建了代理类(打开服务代码文件,您会看到它们),这些代理类是用于在对象来自服务时实例化的类。

如果要避免这种情况,最好使用 WCF。这也处理多态返回对象,因为 web 服务也不能处理多态(所以 remoteExecuteUnitModel 方法的返回类型总是 AbstractUnitModel。

关于c# - 将派生类传递给采用抽象类型的 Web 服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com