2013-02-19 212 views
1

我在c#中創建了一個寧靜的web服務。我在調用POST方法時遇到400錯誤的請求錯誤。我正在檢查我的請求在提琴手和POST請求是完全正常的。我不明白我的程序有什麼問題。REST服務獲取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 web Api,這很簡單 – 2013-02-19 15:24:26

+0

你的意思是ASP.NET MVC 4? – Newbee 2013-02-19 15:38:47

+0

鏈接:http://www.asp.net/web-api,Web Api不是ASP.NET MVC 4,兩者只是在相同的包中 – 2013-02-19 15:40:52

回答

0

我的Web服務正在工作的罰款。

我所做的更改在DataContract屬性中。

最初,它是這樣的:

[DataContract] 

我改成了這樣:

[DataContract(Namespace="")] 

,並開始工作......

提示:當您運行Web服務你可以在web服務的'/ 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端點,則不需要此修改。 – Newbee 2013-02-19 16:13:26

相關問題