Pergunta

Eu tenho a tarefa de escrever uma web SOAP-serviço .Rede de middleware entre EWS2010 e um servidor de aplicativos que anteriormente utilizado WebDAV para se conectar ao Exchange.(Como eu a entendo, WebDAV está indo embora com EWS2010, de modo que o aplicativo de servidor não será mais capaz de se conectar como ele fez anteriormente, e é exponencialmente mais difícil para se conectar a EWS sem WebDAV.A teoria é que, fazendo isso .Net deve ser mais fácil do que qualquer outra coisa...Certo?!)

Meu objetivo final é ser capaz de obter e criar/atualizar e-mail, itens de calendário, contatos e lista de itens para uma determinada conta do Exchange.(Excluindo atualmente não é necessário, mas eu posso construir-lo para consideração futura, se é fácil o suficiente).

Eu estava originalmente dado algum código de exemplo, que na verdade funciona, mas rapidamente percebi que ele estava ultrapassada.Os tipos e classes usadas aparecem em nenhum lugar a documentação atual.

Por exemplo, o método usado para criar uma conexão para o servidor do Exchange foi:

ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);

Por que vale a pena, esse foi o uso de um assembly que veio com o código de exemplo: Microsoft.Exchange.WebServices.dll ("EXTINÇÃO").

Antes de eu percebi que esse não era o padrão atual forma de fazer a conexão, e ele funcionou, eu tentei construir sobre ele, e adicionar um método para criar itens de calendário, que eu copiado daqui:

static void CreateAppointment(ExchangeServiceBinding esb)
{
    // Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    ...
}

De imediato, eu sou confrontado com a diferença entre ExchangeService e ExchangeServiceBinding ("ESB");então eu comecei a buscar no google para tentar descobrir como chegar em um ESB definição de modo a que o CreateAppointment método de compilação.Eu encontrei este post de blog que explica como gerar uma classe de proxy a partir de um WSDL, o que eu fiz.

Infelizmente, isso causou alguns conflitos onde os tipos foram definidos na Montagem original, Microsoft.Exchange.WebServices.dll (que veio com o código de exemplo) sobreposta com os Tipos no meu novo EWS.dll assembleia (que eu compilado a partir do código gerado a partir de services.wsdl fornecida pelo servidor do Exchange).

Eu excluídos os MEWS conjunto, o que só piorou as coisas.Eu fui de um punhado de erros e avisos 25 erros e 2,510 avisos.Todos os tipos de tipos e métodos não foram encontrados.Algo está claramente errado, aqui.

Então eu fui de volta a caça.Achei obter instruções sobre como adicionar referências de serviço e referências da web (por exemplo, os passos extras que tem no VS2008), e eu acho que eu estou de volta no caminho certo.

Eu removido (na verdade, por enquanto, apenas excluídos) todas as assembleias anteriores eu estava tentando;e eu adicionei uma referência de serviço para https://my.exchange-server.com/ews/services.wsdl

Agora eu estou apenas 1 erro e 1 warning.

Aviso:
O elemento 'transporte' não pode conter o elemento filho 'extendedProtectionPolicy' porque o elemento principal do modelo de conteúdo é vazio.

Esta é uma referência para uma mudança que foi feita para web.config quando eu adicionei o serviço de referência;e eu só encontrei uma correção para o que aqui ENTÃO.Comentei que a seção como indicado, e ele fez o aviso de ir embora, então vai para o que.

O erro não foi tão fácil de se locomover, no entanto:

Erro:
O nome do namespace ou tipo 'ExchangeService' não pôde ser encontrado (faltam usando uma diretiva ou uma referência de assembly?)

Esta é uma referência à função a que eu estava usando para criar o EWS ligação, chamados por cada um dos métodos da web:

private ExchangeService getService(String AutoDiscoverEmailAddress, String AuthEmailAddress, String AuthEmailPassword)
{
    ExchangeService svc = new ExchangeService();
    svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
    svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
    return svc;
}

Esta função funcionou perfeitamente com o MEWS montagem, do código de exemplo, mas o ExchangeService tipo não está mais disponível.(Nem é ExchangeServiceBinding, que foi a primeira coisa que eu verifiquei.)

Neste ponto, desde que eu não estou a seguir as instruções da documentação (eu não poderia encontrar em qualquer lugar a documentação que disse para adicionar uma referência de serviço para o Exchange server serviços.wsdl-mas essa não parece ser a melhor/mais distante que eu recebi até agora), eu sinto que estou voando cego.

Eu sei que eu preciso descobrir o que é que deve substituir ExchangeService / ExchangeServiceBinding, implementar e, em seguida, trabalhar através de quaisquer erros surgem como um resultado do que mudar...

Mas eu não tenho nenhuma idéia de como fazer isso, ou onde procurar para saber como fazê-lo.Pesquisando "ExchangeService" e "ExchangeServiceBinding" só parecem levar de volta para desatualizada do blog e MSDN, nenhuma das quais se provou muito útil até agora.

O que devo substituir ExchangeService / ExchangeServiceBinding com?Existe algum outro local que os documentos de trabalho com o EWS que é melhor do que MSDN?

Foi útil?

Solução

Eu recomendaria mover para a gestão EWS API.É muito mais fácil de usar do que tentar calçada tudo junto a si mesmo.Ele suporta tanto o Exchange 2007 SP1 ou Exchange 2010.Eu acho que você vai encontrá-lo muito mais fácil de usar e, provavelmente, irá eliminar os seus problemas.

Versão 1:Aqui é o download da Microsoft.

E aqui estão as MSDN docs.

Para a Versão 2 (obrigado @ruffin!)

Download - MSDN Docs


Adicionado por questão questionador:

Links adicionais que se mostrou útil:

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