0

私は、Visual Studio 2005 で別のプロジェクトとして ASMX Web サービスを持っています。CODE Magazine のチュートリアルによる「アセンブリの分離」を追求するために、私のプロキシ クラスは、私のコードを含まない別のクラス ライブラリ プロジェクトにあります。関連するreference.csapp.config 、 .disco、および .wsdl ファイルを含む ASMXproxy。したがって、コンパイルするとFileServiceProxy.dllがあります。

この WS を使用するために、同じソリューションに FileServiceDemo という Web アプリ プロジェクトがあります。Web 参照はありませんが、代わりに FileServiceProxy.dll への「通常の」参照があります。私の default.aspx.cs ファイルでは、次のスニペットを介して WS にアクセスできます。

using FileServiceProxy.ASMXproxy;
public partial class _Default : System.Web.UI.Page
{
    ASMXproxy.FileService brokerService;
protected void Page_Load(object sender, EventArgs e)
{
    try
        {
            brokerService = new ASMXproxy.FileService();

このように問題なく動作しますが、デプロイされたバージョンをテストしたり、「localhost」バージョンに変更を加えたりするのは面倒です。app.config を単純に変更することはできません。

<applicationSettings>
    <FileServiceProxy.Properties.Settings>
        <setting name="FileServiceProxy_ASMXproxy_FileService" serializeAs="String">
            <value>http://localhost/TRIMBrokerService/FileService.asmx</value>
        </setting>
    </FileServiceProxy.Properties.Settings>
</applicationSettings>

つまり、Web アプリを別のサーバーに公開する必要がある場合、プロキシ クラスの Web 参照を変更して再構築する必要があります。次に、ローカルホストでデバッグする場合は、Web 参照をローカルホストに戻す必要があります (上記のように)。

理想的には、目的の FileServiceProxy.dll に対してある種の「遅延バインディング」を行えるように、Web アプリのデモ プロジェクトで何らかの選択肢 (実行時に URL を変更するためのラジオ ボタンやテキスト ボックスなど) を公開したいと考えています。実行時に使用されます。他の人は「構成ファイルを使用して」提案をスケッチしましたが、私はそれを行う方法に行き詰まっています。追加のプロジェクトと別の DLL (おそらく FileServiceProxyPROD.dll) が必要になるように思えますが、これは厄介なようで、それでも他に何をしなければならないかわかりません。

4

1 に答える 1

2

実際には、同じ参照を使用できます。プロキシ インスタンスの Url プロパティを変更するだけです。

using (var svc = new WebServiceProxy())
{
    svc.Url = realUrl;
    var result = svc.ServiceMethod();
}
于 2009-12-03T01:36:22.917 に答える