私は、Visual Studio 2005 で別のプロジェクトとして ASMX Web サービスを持っています。CODE Magazine のチュートリアルによる「アセンブリの分離」を追求するために、私のプロキシ クラスは、私のコードを含まない別のクラス ライブラリ プロジェクトにあります。関連するreference.cs、app.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) が必要になるように思えますが、これは厄介なようで、それでも他に何をしなければならないかわかりません。