2009-10-14 4 views
0

다음과 같이 WCF REST Service를 작성했습니다.HTTP POST를 시도 할 때 잘못된 요청 400 오류

namespace UserService 
{ 
    // TODO: Modify the service behavior settings (instancing, concurrency etc) based on the service's requirements. Use ConcurrencyMode.Multiple if your service implementation 
    //  is thread-safe. 
    // TODO: Please set IncludeExceptionDetailInFaults to false in production environments 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    [ServiceContract] 
    public class Service 
    { 
     UserManager userManager = new UserManager(); 

     [OperationContract] 
     [WebGet(UriTemplate = "{userName}")] 
     [WebHelp(Comment = "Gets an user object given the username")] 
     public User GetUser(string userName) 
     { 
      return userManager.Read(userName); 
     } 

     [OperationContract] 
     [WebInvoke(Method = "POST", UriTemplate = "", RequestFormat=WebMessageFormat.Xml, ResponseFormat=WebMessageFormat.Xml, BodyStyle=WebMessageBodyStyle.Bare)] 
     [WebHelp(Comment = "Creates an User")] 
     public void CreateUser(User user) 
     { 
      userManager.Create(user); 
     } 
    } 

} 

다음과 같이 ASP.NET 응용 프로그램에서 액세스하고 있습니다.

HttpClient client = new HttpClient(); 


     HttpContent content = null; 

      DiscussionForum.Library.User user = new User(); 
      user.UserEmailAddress = emailAddressTextBox.Text; 
      user.UserName = userNameTextBox.Text; 
      user.UserPassword = passwordTextBox.Text; 

      content = HttpContentExtensions.CreateXmlSerializable<DiscussionForum.Library.User>(user); 
      content.LoadIntoBuffer(); 


      HttpResponseMessage response = client.Post(new Uri("http://localhost/UserService/Service.svc"),"application/xml", content); 

      Response.Write(response.StatusCode.ToString()); 

클라이언트 측의 상태 코드에 Badrequest 400이 나타납니다.

뭔가 빠졌습니까?

+0

브라우저에서 http : //localhost/UserService/Service.svc를 여는 중입니까? –

+0

나는이 일을하고있다. –

답변

0

글쎄, 내가 보게되는 한 가지는 서비스가 DataContractSerializer를 사용하고 클라이언트가 XmlSerializer를 사용하므로 "User"유형의 XML 표현이 같지 않을 수 있습니다.

중 하나는 서비스에 [XmlSerializerFormat] 속성을 사용하거나 클라이언트에서 HttpContentExtensions.CreateDataContract를 사용 (하지만 두 과정 :

의 그러나 나는이 것을 100 % 확실하지 않다 귀하의 문제 (또는 유일한 문제) ... 그렇지 않다면, 여기에 회신하고 일부 디버깅 팁을 도울 수 있습니다.

관련 문제