2014-10-06 6 views
0

Я отправляю (публикую) данные Json в службу wcf.Передача Json для отдыха WCF


public interface IRegisterEmployee 
    { 

     [OperationContract] 
     [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json, UriTemplate = "AddEmployee")] 
     bool ProcessEmployee(Employee emps); 
    } 

[DataContract] 
    public class Employee 
    { 
     [DataMember] 
     public Emp[] emps { get; set; } 

    } 

DataContract] 
    public class Emp 
    { 
     [DataMember] 
     public string FName { get; set; } 
     [DataMember] 
     public string joinDate {get; set; } 
     [DataMember] 
     public Contact[] contacts {get; set; } 

    } 

DataContract] 
    public class Contact 
    { 
     [DataMember] 
     public string key { get; set; } 
     [DataMember] 
     public string value {get; set; } 

    } 

public class RegisterEmployee : IRegisterEmployee 
    { 
     public bool ProcessEmployee(Employee emps) 
     { 
      //do some processing 
      return true; 

     } 

Когда я использую fiddler для отправки входных данных (json), в режиме отладки я вижу, что вход (emps) содержит значения для Emp (то есть FName и joinDate), однако данные для Контакт (ключ, значение) идут как пустая, хотя она присутствовала на входе. Любая идея, почему он приходит как пустой? Если я тестирую это с помощью мыла/xml, я могу видеть все входные данные, и он отлично работает.

ответ

0

Как вы звоните в службу поддержки? я попытался воспроизвести проблему на местном уровне, и я был в состоянии получить некоторые данные вызова службы следующим образом:

string sURL = "http://localhost:13104/RegisterEmployee.svc/AddEmployee"; 

     var employee = new Employee 
     { 
      emps = new Emp[1] { 
       new Emp { 
        FName = "MyFName", 
        joinDate = "12/01/2012", 
        contacts = new WcfService1.Contact[1] 
        { 
         new WcfService1.Contact { key = "myKey", value="myVailue" } 
        } 
       } 
      } 
     }; 

     var json = Newtonsoft.Json.JsonConvert.SerializeObject(employee); 

     ASCIIEncoding encoding = new ASCIIEncoding(); 
     byte[] byte1 = encoding.GetBytes (json); 

     WebRequest wrGETURL; 
     wrGETURL = WebRequest.Create(sURL); 
     wrGETURL.Method = "POST"; 
     wrGETURL.ContentType = @"application/json; charset=utf-8"; 
     wrGETURL.ContentLength = byte1.Length; 
     Stream requestStream = wrGETURL.GetRequestStream();    
     requestStream.Write(byte1, 0, byte1.Length); 
     requestStream.Close(); 


     HttpWebResponse webresponse = wrGETURL.GetResponse() as HttpWebResponse; 

     Encoding enc = System.Text.Encoding.GetEncoding("utf-8"); 
     // read response stream from response object 
     StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc); 
     // read string from stream data 
     string strResult = loResponseStream.ReadToEnd(); 
     // close the stream object 
     loResponseStream.Close(); 
     // close the response object 
     webresponse.Close(); 
     // assign the final result to text box 
     Response.Write(strResult); 
+0

Просто понял, что вход я давал в стельке был в неправильном формате. Ваш пример помог мне определить его. Благодаря! – btsdotnet