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实例的主要内容,如果未能解决你的问题,请参考以下文章

c#根据wsdl文件调用webservice接口

C# 调用java webservice 接口

有一个已知的wsdl,怎么调用webservice(C#中)

C#调用WebService实例和开发

怎么调用webservice接口

如何有delphi5调用webservice,别人写的webservice?