首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET中的SOAP客户端-参考还是示例?

.NET中的SOAP客户端-参考还是示例?
EN

Stack Overflow用户
提问于 2010-06-23 17:34:54
回答 6查看 204K关注 0票数 79

背景:

我正在创建一个over服务站点,它将通过SOAP和可能的其他协议提供许多类型的简单服务。其目标是简化转换、RSS解析、垃圾邮件检查和许多其他类型的工作。该网站将主要针对初学者开发人员。

My Problem:

我从未开发过任何C#或.NET。我在很多年前确实黑了一些VB6,但仅此而已。现在我需要一些在C#中通过SOAP进行远程过程调用的示例。我试着在网上搜索,Stack Overflow,以找到这个,但没有找到很多资源,我也不知道如何对这些资源进行排名(哪些是旧的?哪些是不正确的?等)。

我已经创建了一个简单的示例服务,它在PHP中的名称如下:

代码语言:javascript
复制
<?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 Developer遵循(即使他们是在共享虚拟主机上)。因此,我认为最好的方法应该是只在代码中实现这一点,但当然也欢迎其他方式。

EN

回答 6

Stack Overflow用户

发布于 2011-07-09 19:21:34

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

有两种主要的方法:

A) ASP.NET服务,这是实现SOA的旧方法。

B) WCF,正如John所建议的,它是微软的最新框架,提供了许多协议,包括开放协议和MS专有协议。

逐步添加服务引用

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

  1. 在visual studio
  2. 中打开您的项目(或创建一个新项目),在解决方案资源管理器中右键单击项目(在项目上,而不是在解决方案上),然后单击Add Service Reference
  3. 。下面的屏幕截图应显示一个对话框。输入您的wsdl文件的url并点击Ok。请注意,如果您在点击确定后会收到错误信息,请尝试从url中删除?wsdl部分。

我正在使用http://www.dneonline.com/calculator.asmx?WSDL作为示例

  1. 展开“解决方案资源管理器”中的“服务引用”,然后双击“CalculatorServiceReference”(或您在上一步中为该服务命名的任何名称)。

您应该会看到生成的代理类名和命名空间。

在我的例子中,名称空间是SoapClient.CalculatorServiceReference,代理类的名称是CalculatorSoapClient。正如我在上面所说的,类的名称可能会因大小写而不同。

  1. 转到您的C#源代码并添加以下内容

使用WindowsFormsApplication1.ServiceReference1

  • Now,您可以这样调用服务。

新服务= Service1Client Service1Client();整型年份= service.getCurrentYear();

希望这能有所帮助。如果你遇到任何问题,请让我们知道。

票数 155
EN

Stack Overflow用户

发布于 2011-07-14 10:40:15

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

也就是说,WSDL是复杂、令人讨厌的东西,我尽可能避免从头开始编写它。这里有一些可靠的服务互操作的指导原则(使用Web References、WCF、Axis2/Java、WS02、Ruby、Python等等):

WSDL继续执行代码优先,以创建初始。然后,删除您的代码并从WSDL重新生成服务器类。几乎每个平台都有一个这样的工具。这将向您展示您的特定平台有哪些奇怪的习惯,您可以开始调整WSDL以使其更简单、更直接。调整,重生,重复。通过这种方式,您将学到很多东西,而且它可以将knowledge.

  • Stick移植到普通的老式语言类(POCO、POJO等)。用于复杂类型。不要使用特定于平台的构造,如List<>或DataTable。即使是PHP关联数组看起来也可以工作,但失败的方式很难跨platforms.
  • Stick到基本数据类型进行调试:布尔、整数、浮点数、字符串、日期(时间)和数组。可能性是,你对数据类型的了解越详细,随着时间的推移,你对新需求的敏捷性就会越差。你不想改变你的WSDL,如果你能避免的话。
  • 上面的数据类型有一个例外--给你自己一个NameValuePair机制。您不会相信这些东西的列表会在flexibility.
  • Set方面为您节省多少时间。这并不难,但您可能不相信我在名称空间"http://www.tempuri.org"“中见过多少web服务。它不是一个网站,它是一组抽象的字符,定义了一个逻辑分组。我可能已经有十几个人打电话给我寻求支持,他们说他们去了“网站”,但它不起作用。

</rant> :)

票数 25
EN

Stack Overflow用户

发布于 2011-07-09 19:37:38

看一下"using WCF Services with PHP“。它解释了你所需要的基础知识。

作为理论总结:

WCF或Windows Communication Foundation是一种技术,允许定义从方式中抽象出来的服务-底层通信方法-它们将被调用。

其思想是,您定义一个关于服务做什么和服务提供什么的约定,还定义另一个关于使用哪种通信方法实际使用服务的约定,可以是TCP、HTTP或SOAP。

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

更多资源:

Using WCF with PHP5

也可以看看NuSOAP。如果您现在使用NuSphere,这是一个工具包,可以让您从PHP连接到WCF服务。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3100458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档