2012-05-29 121 views
0

我試圖使用WCF Restful Service。服務配置是如下遠程服務器返回一個錯誤:(400)錯誤的請求

<system.serviceModel> 
<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttp" maxReceivedMessageSize ="50000000" maxBufferPoolSize="50000000" > 
     <readerQuotas maxDepth="500000000" maxArrayLength="500000000" maxBytesPerRead="500000000" maxNameTableCharCount="500000000" maxStringContentLength="500000000"/> 
     <security mode="None" /> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
    <services> 
    <service behaviorConfiguration="ItemTracker.ItemTrackerServiceBehavior" name="ItemTracker.ItemTrackerService"> 
      <endpoint address="http://localhost:8003/ItemTracker/ItemTrackerService.svc" binding="wsHttpBinding" contract="ItemTracker.IItemTrackerService" bindingConfiguration="wsHttp"> 
       <identity> 
        <dns value="localhost"/> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ItemTracker.ItemTrackerServiceBehavior"> 
       <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
       <serviceMetadata httpGetEnabled="true"/> 
       <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

的接口被定義爲如下

Imports System.ServiceModel.Web 
<ServiceContract([Namespace]:="http://localhost:8003/ItemTracker/")> _  
Public Interface IItemTrackerService 

<OperationContract()> _ 
<WebInvoke(Method:="POST", RequestFormat:=WebMessageFormat.Xml, ResponseFormat:=WebMessageFormat.Xml, UriTemplate:="GetItemTrackingDetails")> _ 
Function GetItemTrackingDetails(ByVal TrackingNo As String) As String 

End Interface 

RESTful服務的調用客戶端應用程序是如下

Dim req As HttpWebRequest = Nothing 
    Dim res As HttpWebResponse = Nothing 

    Dim url As String = "http://localhost:8003/ItemTracker/ItemTrackerService.svc?wsdl/GetItemTrackingDetails/" 
    req = DirectCast(WebRequest.Create(url), HttpWebRequest) 
    req.Method = "POST" 
    req.ContentType = "application/soap+xml; charset=utf-8" 
    req.Timeout = 30000 
    req.Headers.Add("SOAPAction", url) 
    Dim xmlDoc As New System.Xml.XmlDocument() 
    xmlDoc.XmlResolver = Nothing 
    xmlDoc.Load(AppDomain.CurrentDomain.BaseDirectory & "\test.xml") 
    Dim sXML As String = xmlDoc.InnerXml 
    req.ContentLength = sXML.Length 
    Dim sw As New System.IO.StreamWriter(req.GetRequestStream()) 
    sw.Write(sXML) 
    sw.Close() 
    res = DirectCast(req.GetResponse(), HttpWebResponse) 

輸入XML是這樣的。

<GetItemTrackingDetails xmlns="http://localhost:8003/ItemTracker/"> 
<TrackingNo>A10001</TrackingNo> 
</GetItemTrackingDetails> 

代替本地主機系統名稱是用來

GetItemTrackingDetails的輸出是XML。有了這個我越來越差的請求400而不是xml

有沒有人可以幫助我。

回答

1

此URL看起來很奇怪:

Dim url As String = "http://localhost:8003/ItemTracker/ItemTrackerService.svc?wsdl/GetItemTrackingDetails/" 

它的工作更好,如果你刪除?wsdl

Dim url As String = "http://localhost:8003/ItemTracker/ItemTrackerService.svc/GetItemTrackingDetails/" 
+0

仍然我得到相同的錯誤 –

0

你並不需要指定的URL實際的服務,只是網址面膜:

http://localhost:8003/ItemTracker/GetItemTrackingDetails/ 

而且你必須一個佔位符添加到您的網址面膜包含輸入參數你的操作:

UriTemplate:="GetItemTrackingDetails/{0}" 

這使您可以撥打實際的URL,並在URL的末尾傳遞TrackingNo變量:

http://localhost:8003/ItemTracker/GetItemTrackingDetails/999AAA 
+0

現在我收到錯誤「遠程服務器返回錯誤:(404)未找到。」這是post方法。所以我使用WebInvoke並將xml文件作爲輸入。 –

+0

如果你把http:// localhost:8003放入Internet Explorer會發生什麼? –

+0

HTTP錯誤403.14 - 禁止Web服務器配置爲不列出此目錄的內容。我得到這個錯誤。但即使在啓用目錄瀏覽後,我仍然通過客戶端代碼 –

相關問題