У меня есть веб-служба WCF. Я хочу опубликовать некоторые значения в базе данных MS SQL с помощью IIS. Метод 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;
}
Я изменил имя параметра uName на имя строки и запустил его в тестовой службе WCF, после чего все заработало. Он также работает в SSMS. Но на Fiddler он все равно не работает. Моя тестовая строка JSON такова: {"sample": "json"} ... Ошибка неверный запрос: 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. Insert вернет 0, если элемент существует, и тогда вам нужно использовать Update. Обновление вернет 0, если элементов нет в базе данных. Затем используйте Insert.





Решено-> Я изменил "BodyStyle = WebMessageBodyStyle.Bare" на "BodyStyle = WebMessageBodyStyle.Wrapped", у меня это сработало ... Всем спасибо ...
Вы отметили публикацию как скрипач, поэтому я предполагаю, что вы используете скрипач. Ваш ответ, вероятно, возвращается с плохим статусом вместо 200 Готово. Какое сообщение об ошибке вы получаете? Вы пробовали команду Insert в SQL Server Management Studio (SSMS)? Вы получаете сообщение об ошибке при подключении?