背景:
我正在创建一个over服务站点,它将通过SOAP和可能的其他协议提供许多类型的简单服务。其目标是简化转换、RSS解析、垃圾邮件检查和许多其他类型的工作。该网站将主要针对初学者开发人员。
My Problem:
我从未开发过任何C#或.NET。我在很多年前确实黑了一些VB6,但仅此而已。现在我需要一些在C#中通过SOAP进行远程过程调用的示例。我试着在网上搜索,Stack Overflow,以找到这个,但没有找到很多资源,我也不知道如何对这些资源进行排名(哪些是旧的?哪些是不正确的?等)。
我已经创建了一个简单的示例服务,它在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 Developer遵循(即使他们是在共享虚拟主机上)。因此,我认为最好的方法应该是只在代码中实现这一点,但当然也欢迎其他方式。
发布于 2011-07-09 19:21:34
先决条件:您已经有了服务和已发布的WSDL文件,并且希望从C#客户端应用程序调用您的web服务。
有两种主要的方法:
A) ASP.NET服务,这是实现SOA的旧方法。
B) WCF,正如John所建议的,它是微软的最新框架,提供了许多协议,包括开放协议和MS专有协议。
逐步添加服务引用
最简单的方法是在C#应用程序中生成代理类(此过程称为添加服务引用)。
我正在使用http://www.dneonline.com/calculator.asmx?WSDL作为示例
CalculatorServiceReference
”(或您在上一步中为该服务命名的任何名称)。您应该会看到生成的代理类名和命名空间。
在我的例子中,名称空间是SoapClient.CalculatorServiceReference
,代理类的名称是CalculatorSoapClient
。正如我在上面所说的,类的名称可能会因大小写而不同。
使用WindowsFormsApplication1.ServiceReference1
新服务= Service1Client Service1Client();整型年份= service.getCurrentYear();
希望这能有所帮助。如果你遇到任何问题,请让我们知道。
发布于 2011-07-14 10:40:15
我已经做了很多您所说的事情,并且平台之间的SOAP互操作性有一条基本规则:契约优先。不要从代码派生WSDL,然后尝试在不同的平台上生成客户端。任何超过"Hello World“类型的函数都很可能无法生成代码,无法在运行时对话,或者(我最喜欢的)无法正确发送或接收所有数据而不会引发错误。
也就是说,WSDL是复杂、令人讨厌的东西,我尽可能避免从头开始编写它。这里有一些可靠的服务互操作的指导原则(使用Web References、WCF、Axis2/Java、WS02、Ruby、Python等等):
WSDL继续执行代码优先,以创建初始。然后,删除您的代码并从WSDL重新生成服务器类。几乎每个平台都有一个这样的工具。这将向您展示您的特定平台有哪些奇怪的习惯,您可以开始调整WSDL以使其更简单、更直接。调整,重生,重复。通过这种方式,您将学到很多东西,而且它可以将knowledge.
</rant>
:)
发布于 2011-07-09 19:37:38
看一下"using WCF Services with PHP“。它解释了你所需要的基础知识。
作为理论总结:
WCF或Windows Communication Foundation是一种技术,允许定义从方式中抽象出来的服务-底层通信方法-它们将被调用。
其思想是,您定义一个关于服务做什么和服务提供什么的约定,还定义另一个关于使用哪种通信方法实际使用服务的约定,可以是TCP、HTTP或SOAP。
您有文章here的第一部分,解释如何创建一个非常基本的WCF服务。
更多资源:
也可以看看NuSOAP。如果您现在使用NuSphere,这是一个工具包,可以让您从PHP连接到WCF服务。
https://stackoverflow.com/questions/3100458
复制相似问题