发送阵列使用POST方法中senchatouch2参数(Sending array as param

2019-10-29 12:30发布

利用这种服务,我想使用senchatouch2..Service POST方法被写入阵列值存储到数据库(WCF)

服务声明:

[OperationContract]
[WebInvoke(Method = "POST", 
           ResponseFormat = WebMessageFormat.Json,
           RequestFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.Wrapped,
           UriTemplate = "/Check1")]
int Psngr(string[] FirstName);

服务定义:

public static int Psngr(string[] FirstName)
{  
    List<Psgr> psgr = new List<Psgr>();
    var getVal = from s in FirstName select s;
    int count = getVal.Count();

    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["db"].ToString());
    con.Open();

    using (var cmd = new SqlCommand("SP_InsertCheck1", con))
    {
        int result;
        cmd.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i < count; i++)
        {
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@FirstName", FirstName[i]);

            using (var Da = new SqlDataAdapter(cmd))
            using (var Ds = new DataSet())
            {
                Da.Fill(Ds);
                result = Convert.ToInt16(Ds.Tables[0].Rows[0]["Result"].ToString());
            }
        }
        return 1;
    }
}

我通过Ajax请求accesssed这项服务如下:

Ext.Ajax.request({
    url:'http://ws.easy4booking.com/E4b.svc/Check1',                                                   
    method:'POST',                                            
    disableCaching: false,                                          
    headers: {
       'Accept': 'application/json',
       'Content-Type': 'application/json'
    },
    params: {
        FirstName:fname_toString,  //FirstName:["Sam","Paul"],
},
    success:function(response) {
        console.log(response);
    }
});

当我访问该服务LIK上面提到我有以下错误

请求错误:

服务器遇到一个错误处理请求。 异常消息是“格式化引发了异常,而试图反序列化消息:错误在反序列化请求消息的主体进行操作‘Psngr’。 遇到意外的字符'F'。 请参阅服务器日志的更多细节。 异常堆栈跟踪是:

在System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(消息信息,对象[]参数)在System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(消息信息,对象[]参数)在System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(消息消息,对象[]参数)在System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(消息信息,对象[]参数)在System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&RPC)在System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc&RPC)在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&RPC)(MessageRpc&RPC)在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&RPC)在System.ServiceModel .Dispatcher.ImmutableDispatchRuntime.Proc essMessage31(MessageRpc&RPC)在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2在System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11在系统(MessageRpc&RPC)(MessageRpc&RPC)(MessageRpc&RPC)。在System.ServiceModel.Dispatcher.MessageRpc.Process ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&RPC)(布尔isOperationContextSet)

Answer 1:

当v使用POST方法来传递SenchaTouch2参数在AJAX请求使用jsonData

Ext.Ajax.request({URL: '',方法: 'POST',disableCaching:假,标头:{ '接受': '应用/ JSON', '内容-类型': '应用/ JSON'},jsonData: {姓:FNAME // { “姓”:[ “山姆”, “保”]}},成功:功能(响应){的console.log(response.responseText);},失败:功能(响应){控制台。日志(response.responseText);},});



Answer 2:

当你的客户做的WCF REST服务请求的原始请求看起来应该象下面这样:

POST http://localhost/SampleService/RestService/Check1 HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Host: localhost
Content-Length: 33

{"FirstName":["Sam","paul"]}

好像你的煎茶代码传递的String []这WCF是不能够反序列化。 你可能会考虑把它作为jsonData而非PARAM。

也看看这个链接它可能的帮助。(他们正试图使用该服务是在Spring MVC,但我想这应该是WCF服务一样好)



文章来源: Sending array as parameters using POST method in senchatouch2