您的位置:首页 > 其它

使用Web请求调用WCF服务

2013-05-06 18:45 471 查看
最近配合公司搞java的同事做web项目,要求调用之前部署的WCF服务。同事找了一些java调WCF的三方包(如 axis2),都不太好使,有的直接就是报错(估计原因是把所有的数据成员都弄到一个类里解析,成员的属性有名称相同的就报错)。还好当时使用的是basichttpbinding,可以直接通过拼字符串调用(别的binding没试,有空再说吧)。

先确定WCF地址

string baseAddress = "http://127.0.0.1/WCFTest/Service/WCTestService.svc";


服务提供一个Execute(Request r)的方法,返回值为Response。Request和Response都为基类。

然后就是万恶的拼soap字符串了

string soapBody = @"<s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"">
<s:Body>
<Execute xmlns=""http://WCF契约命名空间"">
<request i:type=""Request实体类的名称"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">
<Request属性1>属性1的值</Request属性1>
<Request属性2>属性2的值</Request属性2>
</request>
</Execute>
</s:Body>
</s:Envelope>";


  然后就是把字符串以web请求传到服务器上

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
req.Method = "post";
req.Headers["SOAPAction"] = "http://tempuri.org/契约接口名称/调用方法";
req.ContentType = “text/xml”;

byte[] bodyBytes = Encoding.UTF8.GetBytes(soapBody);
req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
req.GetRequestStream().Close();

HttpWebResponse resp;
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException e)
{
resp = (HttpWebResponse)e.Response;
}

if (resp == null)
{
responseBody = null;
Console.WriteLine("Response is null");
}
else
{
Stream respStream = resp.GetResponseStream();
if (respStream != null)
{
//都有stream了还不好说 嘎嘎
}
else
{
Console.WriteLine("HttpWebResponse.GetResponseStream returned null");
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: