Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.Net 2.0标准ASMX Web服务客户端调用.Net 3.5 WCF服务_C#_Wcf_.net 3.5_.net 2.0_Asmx - Fatal编程技术网

C# 从.Net 2.0标准ASMX Web服务客户端调用.Net 3.5 WCF服务

C# 从.Net 2.0标准ASMX Web服务客户端调用.Net 3.5 WCF服务,c#,wcf,.net-3.5,.net-2.0,asmx,C#,Wcf,.net 3.5,.net 2.0,Asmx,我创建了一个托管在安装了.Net 3.5的服务器上的服务,我需要从只安装了.Net 2.0的客户端调用此服务 有什么方法可以做到这一点吗?当然可以-托管在.NET 3.5上的服务不需要在客户端上使用相同版本的.NET framework。你甚至可以从Java或PHP调用这样的服务!这就是面向服务架构的全部要点!:-) 您需要定义您的服务契约(调用什么服务;可以调用什么方法),并且您需要决定如何承载它,例如,您可以在什么地址调用此服务,以及需要什么参数(例如HTTP与TCP、安全或不安全等)——这

我创建了一个托管在安装了.Net 3.5的服务器上的服务,我需要从只安装了.Net 2.0的客户端调用此服务


有什么方法可以做到这一点吗?

当然可以-托管在.NET 3.5上的服务不需要在客户端上使用相同版本的.NET framework。你甚至可以从Java或PHP调用这样的服务!这就是面向服务架构的全部要点!:-)

您需要定义您的服务契约(调用什么服务;可以调用什么方法),并且您需要决定如何承载它,例如,您可以在什么地址调用此服务,以及需要什么参数(例如HTTP与TCP、安全或不安全等)——这是大量工作,即使在WCF中也是如此

这里有三篇介绍WCF的文章-请查看

但是从.NET2.0客户端调用该服务绝对没有问题


Marc

如果您的WCF服务使用basicHttpBinding公开端点,那么.NET 2.0客户端应该可以使用它。正如马克所说,“没问题。”

是的,你能做到。但是,有一些警告:

您必须使用匹配的协议。标准的.NET2.0库不支持许多安全的web服务功能;事实上,如果您希望被默认安装的.NET 2.0所使用,那么您几乎只能在WCF服务上使用basicHttpBinding。在许多企业场景中,这是一个严重的限制。然而,这可能是你所需要的一切

如果您需要更高的安全性,但仍在使用.NET2.0,那么还有其他选择。同样,WCF服务必须适应.NET 2.0客户端,但是.NET 2.0客户端也需要利用外部库。具体来说,您需要由Microsoft发布。但是,请记住,这些库实现了一些SOAP协议的测试版,而WCF(在许多方面是WSE的继承者)默认实现了这些标准。由于协议中有一些突破性的更改(特别是WS-Addressing),因此您必须在WCF服务上提供一个端点来适应这些更改

不幸的是,我无法告诉您将使用哪种协议,因为这取决于您希望在服务上使用哪种协议,但大多数问题都可以通过更改自定义绑定的messageVersion来解决。这不是最好的方案,但如果您尝试集成客户机,它可以为您带来一些好处

总之,要让.NET2.0客户端与WCF服务进行除basicHttpBinding之外的任何通信,都需要做大量的工作。在许多情况下,basicHttpBinding可能就足够了。对于许多企业场景,它不会。我说不出哪一个对你有帮助,但这是可能的——我已经成功地做到了


但这是一个巨大的痛苦。如果可以的话,寻找替代方案

这不是百分之百的正确。很大程度上取决于web服务协议。是的,当然-协议和安全设置等必须匹配-但事实上客户端是.NET 2.0,服务是.NET 3.5并不存在任何问题。问题是,.NET2.0库不支持WCF支持的默认协议——在许多情况下,它们在.NET2.0发布时不存在或未最终确定。所以这根本不是“绝对没有问题”;这是一个巨大的问题。我认为这里要强调的一点是,您可以将已编译的WCF程序集配置为可从2.0访问,而无需使用不同的设置重新编译(在本例中,通过更改宿主应用程序的Web.config/App.config)。NET 2.0不包含任何可以使用NET.tcp或wsHttp的内容,除了WSE,这是一种比疾病更糟糕的治疗方法。那么,我应该使用什么样的绑定,因为现在我使用wsHttp,而且它似乎在allOk上不起作用,我目前正在尝试它,但我遇到了以下错误:请求失败,HTTP状态为415:无法处理消息,因为内容类型为'application/soap+xml;字符集=utf-8;action=“”不是预期的类型“text/xml”;字符集=utf-8'。。有什么想法吗?忘了我的最后一条评论,我修正了它(刷新我的网页参考…)谢谢大家!