0

我在不同的 Visual Studio 解决方案中有一个 ASP.NET Web 应用程序和一个 WCF 服务,它们共享共同的业务逻辑(BLL 项目被添加到两个解决方案中)。它们托管在不同的服务器上。

调用 WCF 服务的以下方法时:

List<RequiredAnimals> requiredAnimals=new List<RequiredAnimals>();
List<Animals>  animals=animalsService.GetRequiredAnimals(requiredAnimals);

...智能告诉我:

参数类型AnimalManager.BLL.RequiredAnimals[]不可分配给参数类型RequiredAnimals[]

请注意,由于我在 AnimalsServiceReference 配置中打开了“在所有引用的程序集中重用类型”,因此我可以将 WCF 服务方法的返回值分配给网站中的变量,例如:

列出动物=animalsService.GetAnimals();

但是我无法做到:

List<RequiredAnimals> requiredAnimals=new List<RequiredAnimals>();
List<Animals> animals=animalsService.GetRequiredAnimals(requiredAnimals);

BLL 中所需的动物如下所示:

  [DataContract]
    public class RequiredAnimal
    {
      [DataMember]
        public string Species{ get; set; }
        [DataMember]
        public string Name{ get; set; }
     }

WCF 方法如下所示:

namespace AnimalsWcfService
{
    public class AnimalsService: IAnimalsService
    {
        public List<Animal> GetRequiredAnimals(List<RequiredAnimals> requirements)
        {
            List<Animal>animals= AnimalLookup.GetAnimals(requirements);
            return animals;
        }

        public List<Animal> GetAnimals()
        {
            List<Animal>animals= AnimalLookup.GetAllAnimals();
            return animals;
        }
    }
}

谁能建议为什么我可以获得共享业务逻辑对象 Animal 的列表,但我不能将 RequiredAnimal 作为参数传递给服务?

4

1 回答 1

1

您的代码中有一个小问题,您正在将 List 转换为数组。

Animals[] animals=animalsService.GetAnimals();

你不需要这样做。去你的

服务参考-->配置-->集合类型-->System.Generic.collections

它将当前设置为 Array。然后,您将能够执行以下操作。

List<Animals> animals = animalsService.GetAnimals();

将其更改为

List<Animals> animals=animalsService.GetRequiredAnimals(requiredAnimals);

请注意,我没有在任何地方将 List 转换为数组

于 2013-08-17T13:03:44.660 回答