1

我的问题是什么

从 ASMX 服务返回的对象用于 Silverlight 应用程序。类有方法,但 ASMX WebMethod 的结果不显示对象上的方法。

告诉我更多

这是我的课

public class Dog
{
      public string Name{get;set;}    
      public void Bark();
}

这是网络方法

[WebMethod]
public List<Dog> Findlabrador()
{
    blah blah blah
    return list_of_labrador;
}

银光代码

void LabradorFetchCompleted(object sender, LabradorFetchCompletedEventArgs e)
{
  var list_of_labrador = e.Result;
  foreach(var labradorDog in list_of_labrador)
  {
      labradorDog.Bark();
      //** WTH my labrador can't BARK** Bark method is not shown in intellisense there is compilation error if i explicitly specify 
  }
}

我是程序员不是外行

好的嗯,让我把你的话。以下是您重现问题的步骤

  • 创建 Silverlight 应用程序项目(让 VS 创建网站来托管应用程序)

  • 创建 Silverlight 类库 在其中创建 Dog 类

  • 将 Silverlight 类库编译为 assembly( Dog.dll)

  • 在 silverlight 应用程序项目中添加对Dog.dllsilverlight 程序集的引用

  • 将 WebService 应用程序添加到项目中( DogService.asmx 注意asmx扩展名)

  • 添加对 SilverlightDog.dll程序集的引用DogService

  • hardcoded List<Dog>从其中的 WebMethod返回类

  • 添加从服务到 Silverlight 应用程序的引用,创建代理客户端实例并调用方法

  • 看着你的狗也不会吠叫:(

4

2 回答 2

5

方法从不序列化。只有数据。您的方法、事件、索引器、构造函数等永远不会被序列化。

无论如何,您都不应该使用 ASMX 服务。请改用 WCF。WCF 使您能够在客户端和服务之间共享数据类型。这将允许诸如“序列化方法”之类的东西:可以在客户端和服务器上使用相同的方法。

于 2012-05-10T05:14:28.657 回答
3

您应该使用可移植类库定义所有通用类, http: //msdn.microsoft.com/en-us/library/gg597391.aspx

然后在 Silverlight 中使用 Web 服务时,您应该要求代理生成器重用这些类。这样可以确保您获得所有功能。

Web 服务定义 (WSDL) 只处理字段/属性。方法不会通过网络传输。

于 2012-05-10T05:18:22.937 回答