Как использовать разные версии проксикласса (производственная или тестовая) веб-службы ASMX - PullRequest
0 голосов
/ 01 декабря 2009

У меня есть веб-сервис 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 - но это кажется неловким, и даже тогда я не уверен, что еще мне придется делать.

1 Ответ

2 голосов
/ 03 декабря 2009

На самом деле, вы можете использовать ту же ссылку. Просто измените свойство Url экземпляра прокси:

using (var svc = new WebServiceProxy())
{
    svc.Url = realUrl;
    var result = svc.ServiceMethod();
}
...