Pergunta

me deparo com esse problema quando eu estou escrevendo um manipulador de eventos no SharePoint. Meu manipulador de eventos tem uma referência web. Quando eu criar esta referência Web, o URL do serviço web será adicionado no arquivo .config do conjunto. Se eu tenho que mudar o URL de referência web i só tem que mudar o link no arquivo de configuração.

O problema vem quando eu tento GAC a dll. Quando eu GAC a DLL, o arquivo de configuração não pode ser GACed juntamente com a dll, e, portanto, não há nenhuma maneira para que eu atualizar a referência da web.

Uma solução que eu encontrei é para modificar o método construtor da classe Reference.cs que é gerada automaticamente pelo visual studio quando eu adicionar uma referência, de modo que o construtor lê a URL do serviço web a partir de algum outro local, digamos, um registro ou um XML arquivo em algum local pré-determinado. Mas isso coloca um problema, por vezes, como quando eu atualizar o referenc web usando o Visual Studio, este arquivo Reference.cs se regenerado, e todas as minhas modificações seriam perdidas.

Existe uma maneira melhor de resolver este problema?

Foi útil?

Solução

Se você tiver Visual Studio 2008, use uma referência de serviço em vez de uma referência Web, que irá gerar classes parciais que você pode usar para substituir a funcionalidade sem o seu código substituído pelo gerador.

Para Visual Studio 2005, você poderia apenas adicionar o parcial palavra-chave para a classe em Reference.cs e manter um arquivo separado com seu próprio classe parcial:

public partial class WebServiceReference
 { public WebServiceReference(ExampleConfigurationClass config) 
    { /* ... */
    }
 }

WebServiceReference svc = new WebServiceReference(myConfig);

Outras dicas

Qualquer aplicativo hospedado pelo SharePoint está usando o web.config localizado na raiz do seu web site do SharePoint no IIS. O que você precisa fazer é adicionar a configuração gerada pela Web / Serviço de Referência assistente para o seu web.config.

Este é mais ou menos como funciona:

  • SharePoint cargas pool de aplicativos sua DLL
  • sua DLL olhares para o serviço de informação no arquivo de configuração do aplicativo atual
  • Seus achados DLL web.config e procura por informações de configuração não

Basicamente, o app.config que está sendo gerado em sua DLL não é usado. Como a aplicação, neste caso, é o pool de aplicativos (w3wp.exe) que está hospedando o aplicativo SharePoint. Para o SharePoint app.config é na verdade o nome web.config e existe na raiz do site do SharePoint.

Eu resolvi isso, tornando a dinâmica de referência na web para a minha biblioteca de classes e, em seguida, copiar a seção applicationSettings de configuração que contém a referência da web a partir do arquivo app.config para o meu site web.config Sharepoint.

Note que você também vai precisar para copiar a entrada para applicationSettings em seu web.config como este não é lá normalmente.

Você poderia tentar isso: Ao invés de usar a referência dinâmica web torná-lo uma referência estática para que o código em Reference.cs não ir à procura de um valor no arquivo .config para a url. Em seguida, sub-classe o código de cliente de serviço web gerado e nessa classe derivada, adiciona sua própria lógica para definir a propriedade .url. Então VS.NET pode re-gen Reference.cs tudo o que gosta, e seu código de configuração url permanecerá. Claro, você tem que atualizar qualquer código jusante de usar sua classe derivada, mas que deve ser substituir um simples global.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top