2013-02-19 2 views
1

C#으로 편안한 웹 서비스를 만들었습니다. POST 메서드를 호출하면 400 개의 잘못된 요청 오류가 발생합니다. 피들러에서 내 요청을 확인하고 POST 요청이 완벽하게 괜찮습니다. 나는 내 프로그램에 무엇이 잘못된 것인지 이해하지 못한다.REST Service 400 잘못된 요청 받기

다음은 일부 코드 스 니펫입니다. 다른 코드를 필요로하는 사람이 있으면 물어보십시오.

[ServiceContract] 
public interface IRead 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "GetCard", Method = "POST")] 
    someObject GetCard(Session session); 
} 

NFCSession 인터페이스

이름 세션의 INT 변수를 갖는 객체이다.

피들러

에서

클라이언트 발생 POST 요청

public void GetCard() 
{ 
     string strGetCard = "http://localhost:8384/Reader/GetCard"; 

     byte[] dataByte = GenerateNFCSession(63315152); 

     HttpWebRequest POSTRequest = (HttpWebRequest)WebRequest.Create(strGetCard); 
     POSTRequest.Method = "POST"; 
     POSTRequest.ContentType = "application/xml;charset=UTF-8"; 
     POSTRequest.ContentLength = dataByte.Length; 

     Stream POSTstream = POSTRequest.GetRequestStream(); 

     POSTstream.Write(dataByte, 0, dataByte.Length); 

     HttpWebResponse POSTResponse = (HttpWebResponse)POSTRequest.GetResponse(); 
     StreamReader reader = 
      new StreamReader(POSTResponse.GetResponseStream(), Encoding.UTF8); 
     Console.WriteLine("Response"); 
     Console.WriteLine(reader.ReadToEnd().ToString()); 
} 

XML 생성기

private static byte[] GenerateXML(int sessionID) 
    { 
     MemoryStream mStream = new MemoryStream(); 
     XmlTextWriter xmlWriter = new XmlTextWriter(mStream, Encoding.UTF8); 
     xmlWriter.Formatting = Formatting.Indented; 
     xmlWriter.WriteStartDocument(); 
     xmlWriter.WriteStartElement("Session"); 
      xmlWriter.WriteStartElement("session"); 
       xmlWriter.WriteString(sessionID.ToString()); 
      xmlWriter.WriteEndElement(); 
     xmlWriter.WriteEndElement(); 
     xmlWriter.WriteEndDocument(); 
     xmlWriter.Flush(); 
     xmlWriter.Close(); 
     Console.WriteLine(mStream.ToArray().ToString()); 
     return mStream.ToArray(); 

    } 

의 Web.config

<?xml version="1.0"?> 
<configuration> 
<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
</system.web> 

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"> 
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, 
System.Web,Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</modules> 
</system.webServer> 

<system.serviceModel> 

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

<standardEndpoints> 
    <webHttpEndpoint> 
    <standardEndpoint name="" helpEnabled="true" faultExceptionEnabled="true" 
automaticFormatSelectionEnabled="true"></standardEndpoint> 
    </webHttpEndpoint> 
</standardEndpoints> 

</system.serviceModel> 

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

</configuration> 

POST 요청 XML

<?xml version="1.0" encoding="utf-8"?> 
<Session> 
    <session>63315152</session> 
</Session> 

는이 오류를

The server encountered an error processing the request. 

참고를 얻을 : 나는 XmlSerializer가 형식을 제공 할 때 잘 작동 속성. 하지만 나중에 JSON 요청에 대해서도 서비스가 작동하도록하고 싶습니다. 그리고 내 관점에서 명시 적으로 형식 특성을 제공 할 필요가 없습니다. 나는이 코드의 잘못된 점을 심각하게 이해하지 못한다.

얘들 아, 도와주세요!

+4

REST API를 사용하는 경우 WCF를 그대로두고 ASP.NET 웹 API를 사용하면 더 간단합니다. –

+0

ASP.NET MVC 4를 의미합니까? – Newbee

+0

링크 : http://www.asp.net/web-api, Web Api는 ASP.NET MVC 4가 아니며 둘 다 같은 패키지에 있습니다. –

답변

0

내 웹 서비스는 이제 잘 작동한다.

내가 변경 한 사항은 DataContract 특성에 있습니다.

는 처음에는이 같았다 :

[DataContract] 

내가이 그것을 변경 :

[DataContract(Namespace="")] 

그리고이 일을 시작 ...

TIP : 당신은 당신의 웹 서비스를 실행하는 경우 웹 서비스의 '/ help'페이지에서 샘플 POST 요청을 볼 수 있습니다. 나는이 페이지에 어떤 주목도하지 않았다. 그러나 그것은 매우 유용합니다. 이 예제를 Fiddler의 실제 요청과 비교했을 때 나는 네임 스페이스가 다르다는 것을 알았습니다. : D

0

시도 <enableWebScript /> 내 행동 태그 추가 : 그것은 여기 설명한 것

... 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
     <enableWebScript /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
... 

을 : http://social.msdn.microsoft.com/Forums/en/wcf/thread/fb48999f-cd41-49b8-ae9a-f0c8f5aebbd2

+0

내 XML에서이 옵션을 얻지 못하고 있습니다.그러나, 당신이 webHttp endpoint를 사용한다면이 수정이 필요 없다고 생각합니다. – Newbee

관련 문제