Pergunta

Eu tenho dois sites na mesma máquina. O primeiro (cliente) faz referência a um serviço WCF no segundo local (servidor).

Como faço para definir o endereço para o serviço de referência? Quando se deslocam de desenvolvimento em minha máquina local para o servidor de desenvolvimento do grupo, como faço para mudar a URL para o serviço? Os locais são diferenciados por cabeçalhos de host, como http: //dev.admin/ ... e http: //dev.public/ ...

Eu sinto que esta pode ser tratada usando vários pontos de extremidade, mas eu sou muito novo para o WCF e realmente não têm a menor idéia do que estou fazendo aqui.

Foi útil?

Solução

Depois de muita frustração, consegui determinar que ambos os arquivos web.config (no cliente e servidor, sendo que ambos são aplicativos web, neste caso), as seções a seguir tem que ser mudado:

Cliente:

   <client>
      <endpoint 
        address="http://mysite.com:port/services/someservice.svc"
        binding="basicHttpBinding" 
        bindingConfiguration="BasicHttpBinding_ISomeService"
        contract="MyServices.ISomeService" 
        name="BasicHttpBinding_ISomeService" />

    </client>
  </system.serviceModel>

Servidor

 <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://mysite.com:port/services"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServices.SomeServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="MyServices.SomeServiceBehavior"
        name="MyServices.SomeService">
          <endpoint address="http://mysite.com:port/services/someservice.svc" 
                    name="endpoint.SomeService"
                    binding="basicHttpBinding" 
                    bindingConfiguration="" 
                    contract="MyServices.ISomeService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

A primeira coisa a notar aqui é que o endereço do host em todas as três secções relevantes (endereço cliente endpoint, valor baseAddressPrefixFilter servidor e endereço endpoint servidor) têm de corresponder.

Eu sou capaz de alternar entre servidores, modificando estes, desde que eles combinam. Eu ainda prefiro uma maneira de definir isso com base em qual máquina o servidor está sendo executado, mas isso funciona para o momento.

WCF Impressões O que é quente: objeto persistente. O objeto proxy do cliente (criado quando você adiciona uma referência de serviço) mantém uma conexão persistente com o serviço no servidor. A instância de serviço referenciado pelo proxy do cliente mantém seu estado entre as chamadas, que pode simplificar assinaturas de métodos e faz o objeto proxy do cliente, eo serviço como um todo, muito mais útil para determinadas aplicações. tipos de parâmetro de objeto pode ser compartilhado entre o cliente eo servidor se eles são declarados em uma biblioteca comum, o que significa que você não tem que criar duas classes muito semelhantes ou invólucro de classes para passar estruturas de dados não-primitivos e para trás.

O que não é: a configuração é uma dor real, mal documentados, e demais envolvidos. Começar este trabalho em uma configuração de ambiente de teste / dev / staging / produção onde o neesd serviço para estar ciente de sua localização é frustrante. Eu não estou convencido de que fazer o serviço ciente de sua url de domínio (em vez de, digamos, um caminho relativo para o que quer que está sendo executado) tem qualquer benefício significativo, preocupações com a segurança de lado.

Dito isso, eu estou continuando a percorrer o caminho WCF como as vantagens, assim,-superam as dores de cabeça.

Outras dicas

A maneira mais fácil:. Executar as peças WCF em portas diferentes

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