提供された.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では機能しません。