.net core 之调用webservice

一、WebClient调取

  这个方法网上也有一些例子,我是参考Stack Overflow上的一篇文章做的,demo代码如下,想用的话照这个改造下就行了。

    public async static Task CallWebService(string webWebServiceUrl)
        {
            string soapText =
           @"
            
               <方法名 xmlns=""替换namespace"">
      <参数1>参数值
       <参数2>参数值    
    
            
        ";

           
                using (WebClient webClient = new WebClient())
                {
                    try
                    {
                        webClient.Proxy = null;
                        byte[] postDatabyte = Encoding.GetEncoding("UTF-8").GetBytes(soapText);
                     
                        webClient.Headers.Add("Content-Type", "text/xml");
                        byte[] responseData = webClient.UploadData(webWebServiceUrl, "POST", postDatabyte);
                        //解码 
                        string responsestring = Encoding.GetEncoding("UTF-8").GetString(responseData);
                      
                        return responsestring;
                    }
                    catch (Exception e)
                    {
                        return null;
                    }
                }

            }
        
}

二、利用微软提供的工具Svcutil.exe 官方链接

2.1 编辑.csproj 文件

       在文件中追加节点,然后在项目跟目录下shift+右键,打开powershell,执行 dotnet restore(或者重新生成)

  
    
  

2.2 生成代理类

继续执行 dotnet svcutil http://替换地址?wsdl,我在执行该命令的时候报错了,报了一个关于binding巴拉巴拉此处省略记不得了的一个错误,但是最后代理类生成成功了(项目路径下生成一个ServiceReference1文件夹,里边有一个Reference.cs 文件),后期测试正常可以用,此处就不深究啦。

2.3 再次执行  dotnet restore(或者重新生成)

2.4 打开项目测试

 首先去看了Reference.cs,就是一个interface接口,然后调用测试,以为万事大吉了呢,谁知一运行就咔咔的报错了,One or more errors occurred. (The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.)

            // 创建 HTTP 绑定对象
            var binding = new BasicHttpBinding();
               
            // 根据 WebService 的 URL
            var endpoint = new EndpointAddress("替换地址");
 
            // 创建调用接口的工厂,注意这里泛型只能传入接口
            var factory = new ChannelFactory<生成的接口>(binding, endpoint);
            // 从工厂获取具体的调用实例
            var callClient = factory.CreateChannel();

            // 调用具体的方法,这个地方就看你都有啥方法啦,自行替换
            string result = callClient.测试方法().Result;

 

 

 拿着这个错误去搜了好久呀,找到一个微软关于这个问题的文章文章链接,但是这篇文章写的有点坑,路径和配置文件都说的不清不楚的,然后我从参考了文章链接,工具路径C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools,造了一个svcutil.exe.config,然而,这并没有拯救我,QAQ,随后我是从这篇文章中得到的启示,其实问题已经很明确了,就是现在找不到配置的地方,实现其实很简单,    binding.MaxReceivedMessageSize = 2147483647;就行了.代码如下,问题顺利解决。

            // 创建 HTTP 绑定对象
            var binding = new BasicHttpBinding();
            binding.MaxReceivedMessageSize = 2147483647;

            // 根据 WebService 的 URL
            var endpoint = new EndpointAddress("替换地址");
 
            // 创建调用接口的工厂,注意这里泛型只能传入接口
            var factory = new ChannelFactory<生成的接口>(binding, endpoint);
            // 从工厂获取具体的调用实例
            var callClient = factory.CreateChannel();

            // 调用具体的方法,这个地方就看你都有啥方法啦,自行替换
            string result = callClient.测试方法().Result;

 

你可能感兴趣的:(.net,core)