2011-08-26 20 views
1

私が作成したRESTful WCFを使用しています。私は、複数のパラメータですべてのメソッド(GET/PUT/DELETE/POST)でサービスを利用することができました。これらは、私はクライアント側で消費することができた方法のいくつかである:複数のパラメータを持つRESTful WCFを消費する(Json)

[WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "GetEmployeePost")] 
[OperationContract] 
string GetEmployeePost(List<Employee> listEmployee); 

[WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "GetEmployeePost/{userId}")] 
[OperationContract] 
string GetEmployeePost2(List<Employee> listEmployee, string userId); 

そして、これらは、クライアント側での私のコードは、上記の方法を消費するために、次のとおりです。

これは私のコレクションです。

public class Employee 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

これらは、WCF RESTメソッドを使用する方法です。

static void ConsumeWcfRestPostMethod() 
{ 
    var listEmployee = new List<Employee>(); 
    listEmployee.Add(new Employee { Id = 1, FirstName = "Eireen", LastName = "Kim" }); 
    var paramContent = Serialize(listEmployee); 
    var result = PostMethod(_baseAddress + "GetEmployeePost", paramContent, "POST"); 
    Console.WriteLine(result); 
    Console.ReadLine(); 
} 

public static string Serialize<T>(T obj) 
{ 
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType()); 
    var ms = new MemoryStream(); 
    serializer.WriteObject(ms, obj); 
    string retVal = Encoding.Default.GetString(ms.ToArray()); 
    ms.Dispose(); 
    return retVal; 
} 

public static T Deserialize<T>(string json) 
{ 
    var obj = Activator.CreateInstance<T>(); 
    var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); 
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType()); 
    obj = (T)serializer.ReadObject(ms); 
    ms.Close(); 
    ms.Dispose(); 
    return obj; 
} 

static string PostMethod(string url, string msg, string method) 
{ 
    string result = string.Empty; 
    byte[] buffer = Encoding.UTF8.GetBytes(msg); 
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 

    myHttpWebRequest.Method = method; 
    myHttpWebRequest.ContentType = "application/json"; 
    myHttpWebRequest.ContentLength = buffer.Length; 

    using (var request = myHttpWebRequest.GetRequestStream()) 
    { 
     request.Write(buffer, 0, buffer.Length); 
     request.Close(); 
    } 

    var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
    using (var reader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8)) 
    { 
     result = reader.ReadToEnd(); 
     myHttpWebResponse.Close(); 
    } 
    return result; 
} 

ここで私の質問があります。どのように私は以下の方法を消費することができますか?事前に

[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "GetEmployeePost3/{userId}")] 
[OperationContract] 
string GetEmployeePost3(List<Employee> listEmployee, List<EmployeeDetail> listEmployeeDetail, string userId); 

この方法は、2リストと文字列パラメータを持っている...

助けてください...

感謝!!

+0

WebChannelFactoryを使用してこの問題を解決しました。 – EddieBoy

+0

ニースのコード..これは確かに使い勝手が良く、何が起こっているのかを完全にコントロールできるようです...良いもの、これをやっているやり方を分かち合ってくれてありがとう、特に上記の一般的な方法です。 – PositiveGuy

答えて

0

私はすでに..クライアント側にWebChannelFactoryを使用して
訪問リンクhereを私のこの問題を解決!

関連する問題