【发布时间】: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。然后使用插入。