【问题标题】:WCF POST Method is not workingWCF POST 方法不起作用
【发布时间】:2018-08-23 02:29:33
【问题描述】:

我有一个 WCF 网络服务。我想使用 IIS 将一些值发布到 MS SQL 数据库中。 GET 方法有效。但我找不到我的 POST 方法中的错误。有没有人帮助我了解我的错误在哪里......谢谢大家。这是我的代码...

    [OperationContract] //Interface
    [WebInvoke(Method = "POST", UriTemplate = "AddName", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
   int AddName(uName name);

     [DataContract]
   public class uName // a class in Interface
    {
        string name;
        [DataMember]
        public string setGetname
        {
            get { return name; }
            set { name = value; }
        }
    }

public int AddName(uName name) //My POST method in service class
    {

        int state = 0;
        SqlConnection connection = new SqlConnection(this.conStr);
        SqlCommand cmd = new SqlCommand();
        try
        {

            if (connection.State == System.Data.ConnectionState.Closed)
            {
                connection.Open();

            }
            cmd = new SqlCommand("Insert into Table_1(kolon1) values(@name)", connection);
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.Parameters.AddWithValue("@name", name.setGetname);
            cmd.ExecuteReader();
            state = 1;

        }
        catch (Exception ex)
        {
            throw ex;

        }
        finally
        {
            connection.Close();
            cmd.Dispose();
        }


        return state;
    }

【问题讨论】:

  • 您使用 fiddler 标记了发布,所以我假设您正在使用 fiddler。您的回复可能会以错误的状态返回,而不是 200 Done。你得到什么错误信息?您是否尝试过 SQL Server Management Studio (SSMS) 中的插入命令?连接时是否出现错误?
  • 我将参数 uName name 更改为 string name,并在 WCF Test Serivce 中运行它,然后它工作了。它也适用于 SSMS。但它仍然不适用于 Fiddler。我的 JSON 测试字符串是: {"sample":"json"} ... Error is bad request: HTTP/1.1 400 Bad Request
  • HTTP 1.0 是流模式,而 HTTP 1.1 是块模式。块模式要求在每个块之后发送下一个块。从来没有让它在网络库中工作。通常我强制使用 1.0:request.ProtocolVersion = HttpVersion.Version10;
  • 它也在使用该代码 cmd.Parameters.AddWithValue("@name","");我无法分配给传递的参数......我仍然找不到解决方案:(
  • 首先你需要改变 int rowsChanged = cmd.ExecuteReader();到 cmd.ExecuteNonQuery() .Insert 如果当数据已经存在于数据库中时列是主键,则插入将不起作用。如果它在数据库中,那么您需要使用更新。要查明数据库中是否存在项目,请运行更新或插入。然后测试 rowsChanged。如果项目存在,则插入将返回 0,然后您需要使用更新。如果项目不在数据库中,更新将返回 0。然后使用插入。

标签: c# json wcf fiddler


【解决方案1】:

已解决-> 我将 "BodyStyle = WebMessageBodyStyle.Bare" 更改为 "BodyStyle = WebMessageBodyStyle.Wrapped" ,它对我有用...谢谢大家...

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 2023-04-04
    • 1970-01-01
    • 2015-03-19
    • 2012-05-31
    • 2019-01-07
    • 2018-01-28
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多