Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ASP.NET MVC控制器将对象发布到VB.NET web服务_C#_Asp.net_Asp.net Mvc_Web Services_Soap - Fatal编程技术网

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

C# 通过ASP.NET MVC控制器将对象发布到VB.NET web服务,c#,asp.net,asp.net-mvc,web-services,soap,C#,Asp.net,Asp.net Mvc,Web Services,Soap,我试图使用SOAP将一个对象从.NETMVC传递到Web服务(VB.NET)。 传递单个字段是有效的,但当我试图传递对象时,它会抛出一个错误 Cannot convert from Project.Models.Table to Project.WebService.Table 要求 将对象从MVC传递到Web服务 下面是我的Web服务代码 问题:获取对象后是否需要序列化 <WebMethod()> Public Function FormData(ByVal obj A

我试图使用SOAP将一个对象从.NETMVC传递到Web服务(VB.NET)。 传递单个字段是有效的,但当我试图传递对象时,它会抛出一个错误

Cannot convert from Project.Models.Table to Project.WebService.Table
要求 将对象从MVC传递到Web服务

下面是我的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
错误是在将数据对象从控制器传递到Web服务时发生的

包含所有字段的表模型类将添加到两个项目中

谢谢你的帮助

谢谢

更新 根据@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))
public JsonResult PostMethod(表数据)
{
FormService.WebServiceSoapClient客户端=新建FormService.WebServiceSoapClient();
var config=new-MapperConfiguration(cfg=>{cfg.CreateMap();});
IMapper IMapper=config.CreateMapper();
var destination=iMapper.Map(数据);
var result=client.FormData(目的地);
网络服务

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

公共函数FormData(ByVal Obj作为Table_WS)作为Table_WS
sqlconn.ConnectionString=连接字符串
sqlcmd.Connection=sqlconn
sqlconn.Open()
sqlcmd.CommandType=Data.CommandType.storedProcess
sqlcmd.CommandText=“SPR\u INSERT”
sqlcmd.Parameters.AddWithValue(“@NAME”,IIf(IsNothing(Obj.NAME),DBNull.Value,Obj.NAME))

谢谢您的帮助。

首先,如果您传递了那么多数据,我认为您应该发布它,而不是获取它,因为您显然是在尝试发送内容,而不是检索。
其次-我不知道VB.NET,但我假设“”代表注释,因此您的代码将始终尝试将数据反序列化为XML。您可以尝试传递参数以通知您的web方法使用了哪种序列化方法。同样-我不确定在VB.NET中是如何实现的。

您无法在这两个表之间进行转换。 公共函数FormData(ByVal obj As Table)需要Project.WebService.Table,您正在传入Project.Models.Table。我认为这是正确的顺序。 您需要向client.FormData传递一个Project.WebService.Table。 您必须将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方法,此时您可以将其转换为您想要的任何类。

为什么要使用2008年以前的ASMX服务?即使如此,为什么要进行原始HTTP调用而不是创建SOAP代理?必须使用2008年的ASMX。我对此不熟悉,所以尝试一下首先发送原始数据。一旦成功,我将尝试使用SOAP代理。即使使用ASMX,
Form
也不是一个web服务。对于初学者来说,SOAP与JSON不兼容,SOAP是一个定义良好的标准,使用XML需要遵循特定的标准。NET和Visual Studio允许您轻松地从类或类生成XML将XML解析为类,实现必要的标准
,因此尝试首先发送原始数据
不会成功。SOAP不会处理原始消息,它会处理非常特定的XML消息。当您添加
WebMethod
属性时,您告诉Visual Studio生成接受well格式的XML消息、特定名称空间和
表单的操作端点,如果您是新手,请不要使用ASMX。它不仅很旧,而且没有实现2003年后定义的互操作性标准。如果您真的想创建SOAP服务,则必须使用WCFIf如果您不需要SOAP,请使用Web API或gRPC instead。如果您真的需要使用SOAP,请从开始。您发布的代码根本不起作用。客户端和服务器端代码都是错误的
通过序列化实现这一点的唯一方法是使用JSON…
这里有许多转换方法,但这绝对不是一种。它转换一个懒惰且缓慢的方法(通过序列化转换)有一个主要的设计错误(将原始字符串传递给web服务,而不是使用正确的模式)。感谢您的输入。我尝试使用AutoMapper映射对象,它按预期工作。