微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 ASP.NET MVC 控制器将对象发布到 VB.NET Web 服务

如何解决通过 ASP.NET MVC 控制器将对象发布到 VB.NET Web 服务

我正在尝试将对象从 .NET MVC 传递到起诉 SOAP 的 Web 服务 (VB.NET)。 传递单个字段有效,但是当我尝试传递对象时,它会引发错误

Cannot convert from Project.Models.Table to Project.WebService.Table

要求 将对象从 MVC 传递到 Web 服务。

下面是我的网络服务代码

问题:我是否需要在获得对象后进行序列化。

 <WebMethod()>
    Public Function FormData(ByVal obj As Table)
        Dim sqlconn As New sqlConnection
        Dim sqlcmd As New sqlCommand
        Try
         Dim formSerializer As New XmlSerializer(GetType(Table))
            Using reader As TextReader = New StringReader(obj)
                data = formSerializer.Deserialize(reader)
            End Using

下面是我的 MVC 控制器,我添加了服务引用。

 public ActionResult Submission(Table data)
        {
            Table obj = new Table();
            FormService.WebServiceSoapClient client = new FormService.WebServiceSoapClient();
            obj = client.FormData(data);
            return obj;
         }

错误是在将数据对象从控制器传递到 Web 服务时。

在两个项目中都添加了包含所有字段的 Table 模型类。

感谢您的帮助。

谢谢。

更新 根据@Panagiotis Kanavos 的建议,我尝试使用 AutoMapper。所以下面是工作代码。我能够将值存储到数据库中。请让我知道它是否正确和安全的方式。谢谢。

客户端

public JsonResult PostMethod(Table data)
{
FormService.WebServiceSoapClient client = new FormService.WebServiceSoapClient();
var config = new MapperConfiguration(cfg => { cfg.CreateMap<Table,Table_WS>(); });
IMapper iMapper = config.CreateMapper();
var destination = iMapper.Map<Table,Table_WS>(data);
var result = client.FormData(destination);

网络服务

<WebMethod()>
Public Function FormData(ByVal Obj As Table_WS) As Table_WS

sqlconn.ConnectionString = CONNECTION_STRING
sqlcmd.Connection = sqlconn
sqlconn.open()
sqlcmd.CommandType = Data.CommandType.StoredProcedure
sqlcmd.CommandText = "SPR_INSERT"
sqlcmd.Parameters.AddWithValue("@NAME",IIf(Isnothing(Obj.NAME),dbnull.Value,Obj.NAME))

感谢您的帮助。

解决方法

首先,如果你传递了那么多数据,我认为你应该发布它,而不是获取它,因为你显然试图发送一些东西,而不是检索。 其次 - 我不知道 VB.NET,但我认为 '' 代表注释,因此您的代码将始终尝试将数据反序列化为 XML。您可以尝试传递参数以通知您的 Web 方法使用哪种序列化方法。再次 - 我不确定它是如何在 VB.NET 中完成的。

,

您无法在 2 个表之间进行转换。 公共函数 FormData(ByVal obj As Table) 期待 Project.WebService.Table 并且您正在传递 Project.Models.Table。我认为这是正确的顺序。 您需要将 Project.WebService.Table 传入 client.FormData。 您必须将 Project.Models.Table 转换为 Project.WebService.Table

像这样的东西应该可以工作。

        public ActionResult Submission(Table data)
        {
            var client = new FormService.WebService1();
            var table = new FormService.Table();
            table.FirstName = data.FirstName;
            table.LastName = data.LastName;
            var obj = client.FormData(table);

            data.FirstName = obj.FirstName;
            data.LastName = obj.LastName;
            ...
        }

通过序列化实现这一点的唯一方法是使用 JSON 并将其作为字符串传递给 Web 方法,此时您可以转换为您想要的任何类。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。