C# 为什么WCF的工作方式与ASMX不同?

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

不确定我做错了什么,但我有两个服务,一个是WCF,另一个是ASMX服务

我正试图用我在asmx版本中使用的方法调用Double数组

以下是两项服务的图像:

我已经修复了调用该方法的问题,但我想知道为什么ArrayOfDouble在我的serviceref2中的显示方式与serviceref1不同

这是WCF版本:

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。如果接口中没有引用该类型,则它不会显示在服务引用中。