2

的,用於顯示的方法是工作在瀏覽器即http://localhost:2617/UserService.svc/testWCF客戶端:傳遞XML字符串中使用WebInvoke

out參數當我添加一個參數,我不能瀏覽它也是WCF REST服務。

我有以下合同。

[ServiceContract] 
public interface IUserService 
{ 
    [OperationContract] 
    [WebInvoke(Method="PUT",UriTemplate = "/tes/{name}", 
    BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
    string Display(string name); 
} 

public string Display(string name) 
{ 
     return "Hello, your test data is ready"+name; 
} 

我嘗試使用下面的代碼

  string url = "http://localhost:2617/UserService.svc/test"; //newuser 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
     string xmlDoc1 = "<Display xmlns=\"\"><name>shiva</name></Display>"; 
     req.Method = "POST"; 
     req.ContentType = "application/xml"; 
     byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1); 
     req.GetRequestStream().Write(bytes, 0, bytes.Length); 

     HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
     Stream responseStream = response.GetResponseStream(); 
     var streamReader = new StreamReader(responseStream); 

     var soapResonseXmlDocument = new XmlDocument(); 
     soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd()); 

叫我無法得到輸出that.please幫我在這。

+1

你在客戶端的方法是「POST」,但在服務器端你有Method =「PUT」 - 我以爲他們必須是相同的 - 嘗試將服務器更改爲POST也許? – kmp 2012-04-04 07:20:29

+0

我改變它POST也...我嘗試了不同的方式,但它不工作.. – 2012-04-04 11:46:26

+1

你還沒有聲明一個命名空間,所以命名空間將是http://tempuri.org - 而不是空白。 – Chris 2012-04-05 07:30:11

回答

1

有幾件事情在代碼中不太正確。

客戶

在你需要指定命名空間是tempuri,因爲你還沒有宣佈明確的一個,所以你的客戶端代碼將需要此客戶端:

string url = "http://localhost:2617/UserService.svc/test"; //newuser 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
string xmlDoc1 = "<Display xmlns=\"http://tempuri.org/\"><name>shiva</name></Display>"; 
req.Method = "POST"; 
req.ContentType = "application/xml"; 
byte[] bytes = Encoding.UTF8.GetBytes(xmlDoc1); 
req.GetRequestStream().Write(bytes, 0, bytes.Length); 

HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
var streamReader = new StreamReader(responseStream); 

var soapResonseXmlDocument = new XmlDocument(); 
soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd()); 

服務

在服務UriTemplate是不完全正確的 - 你指定/tes/{name}所以這將是預期g類似於http://localhost:2617/UserService.svc/tes/shiva的URL,但是您想要將XML數據發佈到正文中,因此您應該將其更改爲UriTemplate = "/test"(我假設您的意思是測試,而不是您的問題中的測試)。

此外,如果您想要向其發送數據(客戶端需要匹配服務,並且我假設您在客戶端上擁有的是您想要的),則該方法應該是POST。

所以,總而言之,你的IUserService應該是這樣的:

[ServiceContract] 
public interface IUserService 
{   
    [OperationContract] 
    [WebInvoke(Method = "POST", 
       UriTemplate = "/test", 
       BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    string Display(string name); 
} 
1

你仍然需要創建一個類

public class Test 
{ 

    public string name { get; set; } 

} 

您也可以使用Fiddler檢查{名稱:999}可以作爲參數傳遞。

相關問題