2014-01-10 25 views
0

我很努力地將具有多個參數的複雜對象從客戶端傳遞到服務器端。如何將對象複合體(DTO)傳遞到使用C#的WCF Post方法

Service.cs

public UserResponseData GetTestobject(UserRequestDataTest reqData,string strTest) 
{ 
    dynamic response; 

    bool IsValidUser = false; 

    if (IsValidUser) 
    { 
     response = new UserResponseData { LoginResult = "Success" }; 
    } 
    else 
    { 
     response = new UserResponseData { LoginResult = "Invalid username and password" }; 
    } 

    return response; 
} 

IService.cs

[OperationContract] 
[WebInvoke(
    Method = "POST", UriTemplate = "GetTestobject/", BodyStyle = WebMessageBodyStyle.Wrapped, 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json)] 
UserResponseData GetTestobject(UserRequestDataTest reqData,string strTest); 

// DataContract

[DataContract] 
public class UserRequestDataTest 
{ 
    [DataMember] 
    public string Username { get; set; } 

    [DataMember] 
    public string Password { get; set; } 

    [DataMember] 
    public List<test> objTestList { get; set; } 
} 


[DataContract] 
public class test 
{ 
    [DataMember(Order = 0)] 
    public string Name { get; set; } 
    [DataMember(Order = 1)] 
    public string Address { get; set; } 
} 

從客戶側訪問服務方法

 Uri address = new Uri("http://localhost:122/Service.svc/web/GetTestobject/"); 

     // Create the web request 
     HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 

     // Set type to POST 
     request.Method = "POST"; 
     request.ContentType = "application/json"; 


     UserRequestDataTest objUserRequestDataTest = new UserRequestDataTest(); 
     List<test> objtestList = new List<test>(); 

     test objtest = new test(); 
     objtest.Address = "1"; 
     objtest.Name = "1"; 
     objtestList.Add(objtest); 

     objtest = new test(); 
     objtest.Address = "1"; 
     objtest.Name = "1"; 
     objtestList.Add(objtest); 

     objUserRequestDataTest.objTestList = objtestList; 
     objUserRequestDataTest.Password = "Test"; 
     objUserRequestDataTest.Username= "Test"; 

     var json1 = new JavaScriptSerializer().Serialize(objUserRequestDataTest); 

     JObject jsonNew = new JObject(); 
     jsonNew.Add("reqData", json1); 
     jsonNew.Add("strTest", "Test"); 

     string data = jsonNew.ToString(); 

     // Create a byte array of the data we want to send 
     byte[] byteData = UTF8Encoding.UTF8.GetBytes(data); 

     // Set the content length in the request headers 
     request.ContentLength = byteData.Length; 

     // Write data 
     using (Stream postStream = request.GetRequestStream()) 
     { 
      postStream.Write(byteData, 0, byteData.Length); 
     } 

     // Get response 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      // Get the response stream 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 

      var statusCode = response.StatusCode; 
     } 

我收到此錯誤「遠程服務器返回錯誤:(400)錯誤的請求。」請指引我解決問題

+0

HttpWebRequest的更容易使用WebApi比WCF。 – jgauffin

+0

你可以嘗試添加一些簡單的字符串返回值的GET方法 - 驗證URL http:// localhost:122/Service.svc/web /通過它應該傳遞的位置..? –

回答

1

我建議使用該服務是這樣的: Consuming a WCF Service

,然後你可以用它簡單的方法:如果你想使用

var sc = new ServiceReference1.SomeClient(); 
var st = sc.GetTestobject(objectParameter,"parameter1"); 
相關問題