Я добавил API для отдыха в службу WCF, к сожалению, я не совсем понимаю, как правильно обрабатывать вызовы POST. Например, в службе WCF есть функция сохранения:
Интерфейс VB.Net:
<OperationContract()>
<WebInvoke(Method: = "POST", UriTemplate: = "/saveNewAZEntry", BodyStyle:=WebMessageBodyStyle.Wrapped, RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json)>
Function SaveNewAZEntry(ByVal NewAZEntry As AZEntry) As AZEntry
Функция ВБ.Нет:
Public Function SaveNewAZEntry(ByVal NewAZEntry As AZEntry) As AZEntry Implements IPMProService.SaveNewAZEntry
If NewAZEntry.start.Date = NewAZEntry.finished.Date And DateDiff(DateInterval.Minute, NewAZEntry.start, NewAZEntry.finished) >= My.Settings.MinAZDauer Then .......
Теперь я пытаюсь вызвать эту функцию в своем приложении через API:
С#:
private static HttpClient _client = new HttpClient();
private static string ServiceUrl = "http://localhost:64917/PMProService.svc/api";
[HttpPost]
internal static void SaveAZEntry(AZEntry azEntry)
{
var uri = new Uri($"{ServiceUrl}/saveNewAZEntry");
try
{
var jsonString = JsonConvert.SerializeObject(azEntry);
HttpContent content = new StringContent(jsonString, Encoding.UTF8, "application/json");
HttpResponseMessage response = _client.PostAsync(uri, content).Result;
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
{
throw ex;
}
}
Теперь функция вызывается через API, но объект не передается в функцию и по-прежнему имеет значение null. Что я здесь делаю неправильно?
Спасибо за помощь, но я уже пробовал это, в том числе и с _client. PostAsJsonAsync(), мне нужно знать, как передать объект в качестве параметра функции WCF при вызове.
Да, верно. Я пропускаю вопрос. Позвольте мне сделать что-нибудь, что может помочь вам
Дайте мне знать, если это то, что вам поможет:
public void SendDataToWCF(AZEntry aZEntry)
{
var uri = new Uri("http://localhost:64917/PMProService.svc/api/saveNewAZEntry");
string strParam = string.Concat("param1 = ", aZEntry.param1, "¶m2 = ", aZEntry.param2);
byte[] data = Encoding.ASCII.GetBytes(strParam);
// Create request
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.Method = "POST";
webrequest.ContentType = "application/x-www-form-urlencoded";
webrequest.ContentLength = data.Length;
//Send/Write data to your Stream/server
using (Stream newStream = webrequest.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
}
// get the response
using (WebResponse resp = webrequest.GetResponse())
{
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
var resultS = reader.ReadToEnd();
// Do something with your response
}
}
}
Спасибо, это не помогает напрямую, но я определенно могу что-то из этого сделать.
Сделайте
SaveAZEntry
методомasync
, затем используйте .... =await _client.PostAsync
....