Мне нужно вызвать службу WCF REST с несколькими параметрами с помощью метода POST, но я не могу создать DataContract, содержащий мои параметры, потому что мне нужны простые типы: мой веб-сервис будет использоваться целевым приложением C.
Я нашел этот синтаксис на сайте MSDN:
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "savejson?id={id}&fichier={fichier}")]
bool SaveJSONData(string id, string fichier);
Чтобы быстро объяснить контекст, я должен вызвать этот метод для сохранения файла JSON с идентификатором, переданным в базу данных.
Мой первый вопрос: действительно ли возможно передать несколько параметров в метод POST, как показано ранее?
Во-вторых: как я могу использовать свой сервис (на данный момент в C #, просто чтобы проверить его) с несколькими параметрами?
Я уже тестировал с DataContract, и я делал так:
string url = "http://localhost:62240/iECVService.svc/savejson";
WebClient webClient = new WebClient();
webClient.Headers["Content-type"] = "application/json; charset=utf-8";
RequestData reqData = new RequestData { IdFichier = "15", Fichier = System.IO.File.ReadAllText(@"C:\Dev\iECV\iECVMvcApplication\Content\fichier.json") };
MemoryStream requestMs = new MemoryStream();
DataContractJsonSerializer requestSerializer = new DataContractJsonSerializer(typeof(RequestData));
requestSerializer.WriteObject(requestMs, reqData);
byte[] responseData = webClient.UploadData(url, "POST", requestMs.ToArray());
MemoryStream responseMs = new MemoryStream(responseData);
DataContractJsonSerializer responseSerializer = new DataContractJsonSerializer(typeof(ResponseData));
ResponseData resData = responseSerializer.ReadObject(responseMs) as ResponseData;
RequestData и ResponseData были объявлены следующим образом:
[DataContract(Namespace = "")]
public class RequestData
{
[DataMember]
public string IdFichier { get; set; }
[DataMember]
public string Fichier { get; set; }
}
[DataContract]
public class ResponseData
{
[DataMember]
public bool Succes { get; set; }
}
Но, как я уже сказал, я больше так не могу ...
Надеюсь, я достаточно ясен, если нет, не стесняйтесь спрашивать меня подробности!
Большое спасибо за вашу помощь.