C#调用webservice wsdl实例
Posted yqj234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用webservice wsdl实例相关的知识,希望对你有一定的参考价值。
在C#程序中调用webservice的接口,如果java或其他语言开发的,要请注意调用的方法 ,需要用soap 来调用
但如果webservice是用JAVA或者其它语言或者其它工具生成的话,使用vs+c#来调用就经常遇到问题;就是使用上面的方法显得很不好使,经常是使用SOAP UI调用没有问题,但使用上面的方法却调用报错,经常是500的错误。当你联系webservice提供商时通常会说SOAP UI都能调用得到,你们用代码为啥子调用不到,问题出在你们的调用方法上。
在我们向其它公司提供webservice的时候,经常也会出现这样的问题,以前我们一直都以为SOAP UI能够调用,那么代码也就一定能够调用得通,但经过实践,我们自己写DEMO调用自己的webservice时才发现,并不是别人的调用代码写的有问题,因为我们自己也无法将自己写的webservice调用得通,或者说没有找到正确的方法调用得通。这时我们就要思考是否是SOAP UI能够调用得通的webservice就代码一定调用没有问题呢?或者说SOAP UI调用webservice和代码调用webservice的原理区别到底在哪里呢?
总结一下:
(1)SOAP UI能够调用成功,代码不一定能够调用成功,代码调用成功并且得到返回结果的前提是webservice可以按标准返回结果,但SOAP UI是只要按信封返回就可以收到结果而不管结果是否标准;
(2)如果webservice的header有用户名和密码的校验,使用SOAP UI可以调用成功并且得到返回结果,但使用上面web引用的方式却不行。对于这种情况,有以下方法可以调用成功:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web.Services;
using System.IO;
using System.Net;
namespace mywsdl
public partial class Form1 : Form
// http://10.80.15.50:9999/Service/test?wsdl
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
public static string GetSOAPReSource(string url, string datastr)
try
//request
Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
//webRequest.ContentType = "application/soap+xml; charset=utf-8";
webRequest.ContentType = "text/xml;charset=utf-8";
webRequest.Method = "POST";
using (Stream requestStream = webRequest.GetRequestStream())
byte[] paramBytes = Encoding.UTF8.GetBytes(datastr.ToString());
requestStream.Write(paramBytes, 0, paramBytes.Length);
//response
WebResponse webResponse = webRequest.GetResponse();
using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
string result = "";
return result = myStreamReader.ReadToEnd();
catch (Exception ex)
throw ex;
private void button2_Click(object sender, EventArgs e)
StringBuilder soap = new StringBuilder();
soap.Append("<soapenv:Envelope xmlns:soapenv=\\"http://schemas.xmlsoap.org/soap/envelope/\\" xmlns:web=\\"http://webservice.my/\\">");
soap.Append("<soapenv:Header/>");
soap.Append("<soapenv:Body>");
soap.Append("<web:test>");
soap.Append("<!--Optional:-->");
soap.Append("<arg0>"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"</arg0>");
soap.Append("</web:test>");
soap.Append("</soapenv:Body>");
soap.Append("</soapenv:Envelope>");
string url = "http://10.80.15.50:9999/Service/test?wsdl";
var result = GetSOAPReSource(url, soap.ToString());
以上是关于C#调用webservice wsdl实例的主要内容,如果未能解决你的问题,请参考以下文章