Emi*_*röm 68 c# wcf soap soap-client
背景:
我正在创建一个webservices站点,它将提供许多类型的简单服务,而不仅仅是SOAP和其他协议.目标是使转换,RSS解析,垃圾邮件检查和许多其他类型的工作变得容易.该网站主要针对初学者开发人员.
我的问题:
我从来没有开发过任何C#或.NET.很多年前我确实破解了一些VB6,但就是这样.现在我需要一些在C#中通过SOAP进行RPC调用的例子.我试图搜索网络和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"
?>
Run Code Online (Sandbox Code Playgroud)
我现在想在C#中尽可能简单地调用这个方法.所有参考和例子都非常受欢迎.我该从哪里开始?哪些课程/模块/我可以使用哪些?
如果有更好的通信框架(后端意味着可扩展),解决方案根本不需要涉及SOAP,但请注意,服务器端是在Unix上用PHP实现的,因此Microsoft的专有解决方案是不可能的.服务器端.
请注意,我需要这样,所以我可以为J. Random Web Developer编写文档,以便遵循(即使它们在共享的虚拟主机上).因此,我认为最好的方法应该是仅在代码中执行此操作,但即使是其他方式,这当然也是受欢迎的.
Dav*_*ita 140
据我所知,您想从C#客户端应用程序调用您的Web服务.您已经拥有该服务并发布了WSDL文件(如果我错了,请更正我).现在,最简单的方法是在C#应用程序中生成代理类(此过程称为添加服务引用).有两种主要方式,.NET提供ASP.NET服务,这是旧的SOA方式,而WCF是John建议的,它是MS的最新框架,提供许多协议,包括开放和MS专有协议.
现在,足够的理论让我们一步一步来做
下面的屏幕截图中将显示一个对话框.输入wsdl文件的url,然后单击Ok.请注意,如果您在点击确定后收到错误消息,请尝试从网址中删除?wsdl部分.

在解决方案资源管理器中展开服务引用,然后双击ServiceReference1(名称可能会有所不同).您应该看到生成的代理类名称和命名空间.在我的例子中,命名空间是WindowsFormsApplication1.ServiceReference1,代理类的名称是Service1Client.如上所述,课程名称可能因您而异.

转到您的C#源代码.添加CalculatorServiceReference.
SoapClient.CalculatorServiceReference
CalculatorSoapClient
希望这有帮助,如果您遇到任何问题,请告诉我们.
mtu*_*tty 25
我已经做了很多你正在谈论的内容,平台之间的SOAP互操作性有一个基本规则:合同第一.难道不是派生从代码的WSDL,然后尝试在不同的平台生成客户端.除了"Hello World"类型函数之外的任何内容都很可能无法生成代码,无法在运行时通话或(我最喜欢的)无法正确发送或接收所有数据而不会引发错误.
也就是说,WSDL是复杂的,令人讨厌的东西,我尽可能避免从头开始编写它.以下是一些可靠的服务互操作指南(使用Web引用,WCF,Axis2/Java,WS02,Ruby,Python等):
</rant> :)
看看" 使用PHP的WCF服务 ".它解释了您需要的基础知识.
作为理论总结:
WCF或Windows Communication Foundation是一种允许定义从方式中抽象出来的服务的技术 - 底层通信方法 - 它们将被调用.
这个想法是你定义一个关于服务做什么和服务提供什么的合同,并定义另一个关于使用哪种通信方法来实际使用服务的合同,无论是TCP,HTTP还是SOAP.
您在这里有本文的第一部分,解释了如何创建一个非常基本的WCF服务.
更多资源:
Aslo看看NuSOAP.如果您现在是NuSphere,那么这是一个允许您从PHP连接到WCF服务的工具包.
如果你可以让它在浏览器中运行,那么像这样简单的东西就可以了
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,您可以找到一个很好的教程,用于从.NET客户端应用程序调用基于NuSOAP的Web服务.但IMO,您还应该考虑用于PHP的WSO2 Web服务框架(WSO2 WSF/PHP)进行服务.参见用于PHP 2.0的WSO2 Web服务框架显着增强了业界唯一的用于创建SOAP和REST服务的PHP库.还有一个关于它的网络研讨会.
现在,在.NET世界中,我还鼓励使用WCF,同时考虑到互操作性问题.可以在此处找到互操作性示例,但此示例使用PHP客户端+ WCF服务而不是相反.随意实现PHP服务和WFC客户端.
在codeplex.com上有一些WCF相关的开源项目,我发现它非常高效.这些项目对于设计和实现Win Forms和Windows Presentation Foundation应用程序非常有用:智能客户端,Web客户端和移动客户端.它们可以与WCF结合使用,以明智地调用任何类型的Web服务.
一般来说,模式和实践团队总结了处理.NET平台的各种开源项目中的良好实践和设计,特别是针对Web.因此,对于任何与.NET客户端相关的设计决策,我认为这是一个很好的起点.