1

私の問題は何ですか

ASMX サービスから返されたオブジェクトは、Silverlight アプリケーションで使用されます。クラスにはメソッドがありますが、ASMX WebMethod からの結果にはオブジェクトのメソッドが表示されません。

もっと教えて

ここに私のクラスがあります

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

ここにWebメソッドがあります

[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 アプリケーション プロジェクトを作成します (アプリケーションをホストする Web サイトを VS に作成させます)。

  • Silverlight クラス ライブラリを作成し、その中に Dog クラスを作成します。

  • Silverlight クラス ライブラリを assembly( Dog.dll)にコンパイルします。

  • Dog.dllSilverlight アセンブリへの参照を Silverlight アプリケーション プロジェクトに追加します。

  • プロジェクトに WebService アプリケーションを追加します ( DogService.asmx 拡張子に注意してくださいasmx) 。

  • の SilverlightDog.dllアセンブリへの参照を追加します。DogService

  • hardcoded List<Dog>その中の WebMethod からクラスを返す

  • Service から 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 に答える