C# 为什么WCF的工作方式与ASMX不同?
不确定我做错了什么,但我有两个服务,一个是WCF,另一个是ASMX服务 我正试图用我在asmx版本中使用的方法调用Double数组 以下是两项服务的图像: 我已经修复了调用该方法的问题,但我想知道为什么ArrayOfDouble在我的serviceref2中的显示方式与serviceref1不同 这是WCF版本:C# 为什么WCF的工作方式与ASMX不同?,c#,asp.net,wcf,web-services,soap,C#,Asp.net,Wcf,Web Services,Soap,不确定我做错了什么,但我有两个服务,一个是WCF,另一个是ASMX服务 我正试图用我在asmx版本中使用的方法调用Double数组 以下是两项服务的图像: 我已经修复了调用该方法的问题,但我想知道为什么ArrayOfDouble在我的serviceref2中的显示方式与serviceref1不同 这是WCF版本: namespace WcfSum { // NOTE: You can use the "Rename" command on the "Refactor" menu to c
namespace WcfSum
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface SumListWCF
{
[OperationContract]
string CalculateSum(List<double> listDouble);
}
}
namespace WcfSum
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class SumList : SumListWCF
{
public string CalculateSum(List<double> listDouble)
{
return listDouble.Sum().ToString();
}
}
}
这是ASMX版本:
namespace CalculateWebServiceSum
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class SumList : System.Web.Services.WebService
{
[WebMethod]
public string CalculateSum(List<double> listDouble)
{
return listDouble.Sum().ToString();
//return listDouble.Select(n => (double)n).ToString();
}
}
}
以前的帖子在这里:
这提供了修复,但没有解释为什么它不能以相同的方式运行。或者如果有办法让它也这么做。这让我觉得我基本上错过了什么
编辑
p.s这些仅在本地运行。您使用的是泛型列表参数,由于与不支持泛型集合的语言的互操作性,asmx和wcf不支持该参数。另见
这提到了一个生成的ArrayFint,因此ArrayOf*类型名称可能是处理泛型类型的通用解决方案。SOAP或WSDL标准中没有规定列表之类的内容应如何序列化。ASMX显然在XML模式中发明了一个complexType来表示double数组 WCF比ASMX好得多。当您使用AddServiceReference时,您可以决定如何处理重复的元素,如double数组。您可以选择将它们视为数组、列表等
将WCF限制在传统技术ASMX的限制范围内是有负面价值的。WCF服务有一个肮脏的小秘密:它们是如此痛苦,以至于我所知道的现实世界中没有人在有选择的情况下使用它们。我们创建了老式的ASMX,当我们在VS2010中添加服务引用时,我们会转到高级->添加Web引用,以便按照您期望的方式工作。WCF服务与ASMX服务不同。为什么你会对它们的不同感到惊讶?我认识的很多人在现实世界中使用WCF,我不知道这是怎么回事,他们只是略有不同。我更喜欢WCF,因为它很可能会得到微软的持续支持和改进。那不可能是真的吗?另外,我尝试了高级选项来添加web ref,但它并没有按照我想要的方式工作。如果您可以直观地添加一个web引用并添加所需的方法,那就太好了。我肯定是服务和操作合同有点我搞错了。@Garrith我在代码中没有看到ArrayOfDouble。如果接口中没有引用该类型,则它不会显示在服务引用中。