*(00)*

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  613 随笔 :: 0 文章 :: 45 评论 :: 159万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

C#使用WebService

 

一、新建webservice

  1. 新建项目→asp.net Web服务应用程序
  2. 或者在现有项目中 点击右键 新建web服务程序asmx
  3. 只要在webservice类里面 的方法 标注为【WebMethod】就成为别人可以调的方法
  4.                       
  5. 如果要返回DataTable  
  6. 只要 DataTable.TableName 不为空, 即可返回 否则不行.
  7. 二、webservice调用

引用之后直接就可以使用里面的方法了 命名空间 类名 client=new 类; client.方法()

 

常用错误

①无法加载协定为“ServiceReference1.InterfaceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的

如果出现以上错误是因为第一次引用webservice的时候已经在webconfig里面产生了<endpoint>配置节点,首次运行的时候又一次加了那么一个配置节点重复了,需要手动删除一个节点原因是在web.config 文件中多次引用了“添加外部引用”

复制代码
复制代码
 <client>
      <endpoint address="http://218.90.168.115:8000/PJSDFacade/PJSD/Interface.asmx"
        binding="basicHttpBinding" bindingConfiguration="InterfaceSoap"
        contract="ServiceReference1.InterfaceSoap" name="InterfaceSoap" /> <!-- 下面节点删除-->
      <endpoint address="http://218.90.168.115:8000/PJSDFacade/PJSD/Interface.asmx"
        binding="customBinding" bindingConfiguration="InterfaceSoap12"
        contract="ServiceReference1.InterfaceSoap" name="InterfaceSoap12" />
    </client>
复制代码
复制代码
所以删掉一个节点既可(如查引用的是WebServiceSoap,删掉WebServiceSoap1的有关节点,反之~)

也可以在页面引用的时候指定bindingConfiguration名字:

如:ServiceReference.WebServiceSoap web = new WebServiceSoapClient("InterfaceSoap");

 

在调用webservice返回数据的时候, 出现以下错误:

已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性

这个就需要在调用webservice的解决方案中,在web.config或者app.config中配置一下:注意红色字体为哪个节点下加的哪些配置。

复制代码
复制代码
  <system.serviceModel>
        <bindings >
              <basicHttpBinding>
                    <binding name="InterfaceSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"   />
              </basicHttpBinding>
              <customBinding>
                    <binding name="InterfaceSoap12"   >
                          <textMessageEncoding messageVersion="Soap12" />
                          <httpTransport />
                    </binding>
              </customBinding>
        </bindings>
        <client>
              <endpoint address="http://218.90.168.115:8000/PJSDFacade/PJSD/Interface.asmx"
                    binding="basicHttpBinding" bindingConfiguration="InterfaceSoap"
                    contract="ServiceReference.InterfaceSoap" name="InterfaceSoap" />
             
        </client>
    </system.serviceModel>
复制代码
复制代码

   如果在本地测试webservice可以运行,在远程却显示“测试窗体只能用于来自本地计算机的请求”或者"The test form is only available for requests from the local machine. ",那是因为没有开启远程访问的原因。      大家都知道,Web服务做好后,发布在网上,别人要调用你提供的接口时,是无法打开测试窗体的,这让很多的朋友都蛮郁闷,为什么别人提供的服务接口就能够打开测试窗体,而我的就不行呢?是不是我的代码写的有问题呢?其实不是这样的,下面,我就来教你如何实现这个功能,让客户端也能够打开测试窗体。 1:在web.config的</system.web>中间加入如下配置节内容 <system.web> <webServices>          <protocols>             <add name="HttpSoap"/>             <add name="HttpPost"/>             <add name="HttpGet"/>             <add name="Documentation"/>          </protocols> </webServices> </system.web> 2.通过编辑 Machine.config 中的 <protocols> 节为计算机上的所有 Web 服务启用这些协议。下面的示例启用了 HTTP GET、HTTP POST 及 SOAP,此外还从本地主机启用了 HTTP POST: <protocols> <add name="HttpSoap"/> <add name="HttpPost"/> <add name="HttpGet"/> <add name="HttpPostLocalhost"/> <!-- Documentation enables the documentation/test pages --> <add name="Documentation"/> </protocols> http://stu-xu.i.sohu.com/blog/view/170429191.htm http://blog.csdn.net/wangtao790108/article/details/5568281

posted on   *(00)*  阅读(1707)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示