对于Display方法的out参数,它在浏览器中工作,即http://localhost:2617/UserService.svc/test
当我添加一个参数时,我也无法浏览它。
我有以下合同。
[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());
我无法获得输出。请帮助我。
答案 0 :(得分: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}
,以便期望像http://localhost:2617/UserService.svc/tes/shiva
这样的网址,但您想要在其中发布XML数据因此你应该将其更改为UriTemplate = "/test"
(我假设你的意思是测试,而不是你问题中的测试)。
此外,如果您想要向其发送数据,该方法应该是POST(客户端需要匹配服务,我假设您在客户端上拥有的是您想要的)。
因此,总之,您的IUserService应如下所示:
[ServiceContract]
public interface IUserService
{
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/test",
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string Display(string name);
}
答案 1 :(得分:1)
您仍然需要创建一个类
public class Test
{
public string name { get; set; }
}
您还可以使用fiddler检查{name:999}是否可以作为参数传递。