代码之家  ›  专栏  ›  技术社区  ›  Emil Vikström

.NET中的SOAP客户端-参考或示例?

  •  65
  • Emil Vikström  · 技术社区  · 16 年前

    我正在创建一个webservices站点,它将通过SOAP和其他协议提供多种类型的简单服务。我们的目标是使它更容易进行,例如转换、RSS解析、垃圾邮件检查和许多其他类型的工作。该网站将主要针对初学者开发。

    我的问题是:

    我从未为此开发过任何C#,或.NET。很多年前我确实破解了一些VB6,但仅此而已。现在我需要一些

    我创建了一个简单的示例服务,在PHP中称为:

    <?php
    $client = new SoapClient('http://webservi.se/year'); //URL to the WSDL
    echo $client->getCurrentYear(); //This method returns an integer, called "year"
    ?>
    

    现在我想在C中尽可能容易地调用这个方法。所有的参考和例子都是非常欢迎的。我从哪里开始?我可以使用哪些类/模块/什么?

    如果有更好的通信框架(后端是可扩展的),那么这个解决方案根本不必涉及SOAP,但是请注意,服务器端是在Unix上用PHP实现的,因此在服务器端不可能有来自Microsoft的专有解决方案。

    请注意,我需要这一点,这样我就可以编写文档供J.Random Web开发人员遵循(即使他们在共享的Web主机上)。因此,我认为最好的方法应该是只使用代码来实现这一点,但当然,即使是其他方法也值得欢迎。

    6 回复  |  直到 14 年前
        1
  •  151
  •   KyleMit Steven Vachon    6 年前

    先决条件 :您已经拥有该服务和已发布的WSDL文件,并且希望从C#客户端应用程序调用您的web服务。

    (一) ASP.NET服务
    (二) WCF公司

    最简单的方法是在C应用程序中生成代理类(此过程称为添加服务引用)。

    1. 在解决方案资源管理器中右键单击项目(在项目上而不是在解决方案上),然后单击添加服务引用
    2. 一个对话框应该出现在下面的截图中。输入wsdl文件的url并单击Ok。请注意,如果在单击“确定”后收到错误消息,请尝试删除?来自url的wsdl部分。

      add service reference dialog

      http://www.dneonline.com/calculator.asmx?WSDL 作为一个例子

    3. CalculatorServiceReference (或您在上一步中命名的服务)。

      在我的例子中,名称空间是 SoapClient.CalculatorServiceReference CalculatorSoapClient . 如上所述,类名可能因您的情况而有所不同。

      service reference proxy calss

    4. using WindowsFormsApplication1.ServiceReference1
      
    5. Service1Client service = new Service1Client();
      int year = service.getCurrentYear();
      

    希望这有帮助。如果您遇到任何问题,请告诉我们。

        2
  •  25
  •   mtutty    14 年前

    我已经做了很多你所说的,平台间的SOAP互操作性有一个基本规则:契约优先。做 从代码中派生WSDL,然后尝试在其他平台上生成客户机。任何超过“Hello World”类型的函数都很可能无法生成代码,无法在运行时进行对话,或者(我最喜欢的)无法正确地发送或接收所有数据而不引发错误。

    也就是说,WSDL是一个复杂、讨厌的东西,我尽量避免从头开始编写它。以下是一些关于可靠的服务互操作的指导原则(使用Web引用、WCF、Axis2/Java、WS02、Ruby、Python等等):

    • 对于复杂类型,请坚持使用简单的旧语言类(POCO、POJO等)。不要使用特定于平台的结构,如List<>或DataTable。即使PHP关联数组看起来也能正常工作,但失败的方式很难跨平台调试。
    • 以上数据类型的一个例外是,给自己一个NameValuePair机制。你不会相信有多少次,这些东西的清单会节省你的培根在灵活性方面。

    </rant> :)

        3
  •  7
  •   John Saunders    14 年前

    如果你能让它在浏览器中运行,那么像这样简单的事情就可以了

    var webRequest = WebRequest.Create(@"http://webservi.se/year/getCurrentYear");
    
    using (var response = webRequest.GetResponse())
    {
        using (var rd = new StreamReader(response.GetResponseStream()))
        {
            var soapResult = rd.ReadToEnd();
        }
    }
    
        4
  •  7
  •   jesusduarte Jorge Córdoba    10 年前

    using WCF Services with PHP

    作为理论总结:

    WCF或WindowsCommunicationFoundation是一种技术,它允许定义从调用它们的方式(底层通信方法)抽象出来的服务。

    其思想是定义一个关于服务做什么和服务提供什么的契约,并且定义另一个关于使用哪种通信方法来实际使用服务的契约,不管是TCP、HTTP还是SOAP。

    你有文章的第一部分 here ,解释如何创建非常基本的WCF服务。

    Using WCF with PHP5 .

    NuSphere 这是一个工具箱,可以让您从PHP连接到WCF服务。

        5
  •  6
  •   John Saunders    16 年前

    你找错地方了。你应该抬头看看 Windows Communication Framework


    WCF在客户端和服务器上都使用。

        6
  •  5
  •   Eduardo Lago Aguilar    14 年前

    Here 您可以找到一个很好的教程来从.NET客户端应用程序调用基于NuSOAP的web服务。但在我看来,你也应该考虑 WSO2 Web Services Framework for PHP (WSO2 WSF/PHP) WSO2 Web Services Framework for PHP 2.0 Significantly Enhances Industry’s Only PHP Library for Creating Both SOAP and REST Services . 还有一个 webminar 关于它。

    here ,但本例使用PHP client+WCF服务,而不是相反。请随意实现PHP服务和WFC客户机。

    有一些WCF的相关开源项目codeplex.com公司我觉得很有成效。这些项目对于设计和实现Win Forms和Windows Presentation Foundation应用程序非常有用: Smart Client , Web Client Mobile Client

    一般来说 patterns & practices team 总结处理.NET平台的各种开源项目的良好实践和设计,特别是针对web。因此,我认为这是任何与.NET客户端相关的设计决策的良好起点。

    推荐文章