1

クラスライブラリがあります。クラスの 1 つで、次のようにページにスクリプト参照を追加しています。

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        if (this.Page != null)
        {
            ScriptManager sm = ScriptManager.GetCurrent(this.Page);
            ServiceReference reference = new ServiceReference("~/Admin/Services/ContactsService.asmx");
            reference.InlineScript = true;
            sm.Services.Add(reference);
        }
    }

ServiceReference ファイル パスについて、代わりに埋め込みファイルを追加する方法はありますか? ファイルを Web サイト フォルダーにドロップするのではなく、すべてをクラス ライブラリに自己完結させたいと考えています。

4

1 に答える 1

0

あなたが求めていることを正しく理解していれば、 aWebServiceは実際にコンパイルされたクラスであり、 aWebMethodは実際にコンパイルされたメソッドであるため、これを行うことはできません。

GetWebResourceUrlメソッドは、その名前が示すとおり、リソースを返します。クライアント スクリプト (Javascript) は単なる文字列リソースであり、サーバー上で実行する必要はなく、単にテキストとしてクライアントに送信されます。Web サービス (およびそのメソッド) には、クライアントの要求に応答してこのコードを実行できる物理エンドポイントが必要です。

理論的には、WCF を使用していた場合、実行時にサービス エンドポイントの URL を特定できます。これは、WCF が動作からエンドポイントを分離し、web.config の特定の場所で定義するためです。これでは、「サービス」全体を として提供することはできませんがWebResource、URL をハードコードする必要はありません。ASMX WebServices を使用している場合、ASMX は ASP.NET ページと同様のマークアップ ファイルを使用するため、そのオプションさえありません。

この Web サイトを複数のサーバー/ドメインに展開するなど、URL が変更される可能性が心配な場合は、URL をアプリケーション設定として外部化することをお勧めします。そうすれば、web.config を編集して、スクリプト参照に使用する URL を変更するだけで済みます。

于 2010-04-03T23:33:08.350 に答える