0

提供された.dllまたはSOAPを使用してWebサービスに接続するSilverlight3アプリケーションを開発しています。しかし、.dllはSilverlightには適していないため、それはできません。また、クロスドメインの問題が原因でSOAPサービスにアクセスできません(ホストしていないため、clientpolicy xmlではアクセスできません)。

したがって、私の解決策は、自分のドメインのWCF対応Webサービスに.dllを含め、SilverlightアプリケーションにWebサービスを呼び出させることです。これは機能します。

ここで私の問題:私のWebサービスによって参照される.dllから提供されるクライアントには.Connect()メソッドがあるため、オブジェクトの状態を保存する必要があります。しかし、私はそれを行うことができますか?おそらく、SilverlightがwsHttpBindingをサポートしていないためではありません。ASPセッション変数にアクセスできることは知っていますが、ブラウザー外でもアクセスできますか?私は自分の問題に対する1つの解決策しか理解できません。それは、ASPセッションにユーザー名/パスワードを保存し、各メソッドで.Connect()メソッドを呼び出すことです。しかし、それは本当に悪い解決策です。

より良いアイデア?


はっきりしなかったと思いますので、お詫び申し上げます。私の英語が適切にその主な原因です。

私は持っています:

Webサイトとブラウザー外で実行される私のSilverlightアプリ

同じドメインでホストされている私のWCFサービス。

クロスドメインWebサービス(クロスドメインポリシーファイルを保存するためのアクセス権を取得できません)

ポリシーファイルがないとクロスドメインWebサービスを追加できないため、私のWCFWebサービスはアプリとクロスドメインWebサービスの間にレイヤーを提供します。

私のWebサービスは次のようになります(抽象的な方法で):

class MyWebService
{
   CrossDomainWebServiceClient client = new CrossDomainWebServiceClient();

   public void Connect(string username, string password)
   {
      client.Connect(username, password);
   }

   public object Foo()
   {
      //GetEmployees() do only work if I'm connected
      return client.GetEmployees(); 
   }
}

Foo()メソッドは、呼び出しごとのセッションであり、インスタンスごとのセッションではないため、機能しません。これを機能させたい。したがって、クライアントオブジェクトは、次の呼び出しのために保持する必要があります。wsHttpBindingは明らかにサポートされていないため、Session.requiredはSilverlightでは機能しません。

4

3 に答える 3

0

dllがSilverlight3ランタイムに対してビルドされていない場合、Silverlightプロジェクトからそれを参照することはできません。そのランタイムでdllを再構築するようにクライアントに依頼します。

Silverlightは、完全な信頼を必要とするコードの実行に関しては厳格です。Silverlightアプリケーションは、dllがどのランタイムにあるかを認識していない場合、それを受け入れたり、呼び出しを行ったりすることはありません。

于 2009-10-24T22:27:26.707 に答える
0

アップデート:

セッションの存続期間中、サービス オブジェクトをメモリに保持するようにサービスをマークできます。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
class MyWebService{   
    CrossDomainWebServiceClient client = new CrossDomainWebServiceClient();   

これにより、クロスドメイン クライアントが呼び出し間で初期化されたままになります。

元の答え:

Silverlight オブジェクトは呼び出し間で存続するため、メモリ内の状態を維持できます。

Silverlight アプリケーションの実行間で状態を保存する場合は、状態をクライアント コンピューターの分離ストレージにシリアル化し、Silverlight アプリケーションの起動時に再度読み取ることができます。

于 2009-10-28T19:21:50.937 に答える