У меня есть веб-сервис ASMX как отдельный проект в Visual Studio 2005. В стремлении "разделить сборку" на учебник CODE Magazine мой прокси-класс находится в отдельном проекте библиотеки классов, не содержащем мой код - просто веб-ссылка с именем ASMXproxy со связанными файлами reference.cs , app.config , .disco и .wsdl. Таким образом, при компиляции у меня есть FileServiceProxy.dll .
Для использования этого WS у меня есть проект веб-приложения с именем FileServiceDemo в этом же решении. У него нет веб-ссылки, но есть «обычная» ссылка на 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>
Короче говоря, когда мне нужно опубликовать свое веб-приложение на другом сервере, я должен изменить веб-ссылку в прокси-классе и перестроить ее. Затем, когда я хочу отладить его на своем локальном хосте, я должен изменить веб-ссылку обратно на локальный хост (как выше).
В идеале я хотел бы предоставить какой-то выбор (например, переключатели или текстовое поле для изменения URL во время выполнения) в моем демонстрационном проекте веб-приложения, чтобы у меня была возможность «позднего связывания» для желаемого FileServiceProxy .dll для использования во время выполнения. Другие набросали предложения "с использованием файлов конфигурации" , но я застрял на том, как это сделать. Мне кажется, что мне нужно было бы иметь дополнительный проект и, следовательно, другую DLL - возможно, FileServiceProxyPROD.dll - но это кажется неловким, и даже тогда я не уверен, что еще мне придется делать.