none
Problema ao adicionar um serviço WCF (Forma imperativa). RRS feed

  • Pergunta

  • Bom dia pessoal.

    Estou com um problema na hora de referenciar o meu serviço WCF (forma imperativa), segue:

     - O Serviço foi criado todo na forma imperativa, assim não existe nada no app.config.
     - Todo serviço criado é colocado em uma IList.
     - Quando tento acessar o serviço via browser não gera nenhum erro, mas as informações do serviço não aparece (conteúdo em branco).

    Quando tento acessar pelo VS ocorre o seguinte erro:

    The request failed with HTTP status 405: Method Not Allowed.
    Metadata contains a reference that cannot be resolved: 'http://10.2.0.167:8732/Empresa/PluginLibrary/'.
    There was no endpoint listening at http://10.2.0.167:8732/Empresa/PluginLibrary/ that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
    The remote server returned an error: (404) Not Found.
    If the service is defined in the current solution, try building the solution and adding the service reference again.

     

    Bom pessoal é isto espero que alguém saiba o que possa esta acontecendo.

    Muito obrigado.

    Paulo Henrique.

    quinta-feira, 18 de novembro de 2010 12:40

Respostas

  • Boas Paulo,

    De certeza que o endereço que você está publicando o serviço é o mesmo que está tentando referenciar na aplicação?

    Se você publica o documento WSDL via HTTP e define a propriedade HttpGetEnabled como True, então você deveria visualizar o WSDL no próprio browser.
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 15:31
    Moderador

Todas as Respostas

  • Boas Paulo,

    Mas quais são as características do seu serviço?! REST?
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 12:53
    Moderador
  • Bom dia Israel,

    Meu serviço é padrão WCF mesmo SOAP, usando NetTcp e o mex. Veja:

                host.AddServiceEndpoint(
                        TypeInterface,
                        MeuBindingNetTcp,
                        string.Empty);


                    host.AddServiceEndpoint(
                        typeof(IMetadataExchange),
                        MetadataExchangeBindings.CreateMexHttpBinding(),
                        "mex");

    E todo o Behavior é declarado via código também.

    O estranho é que o host inicia normalmente.

    Muito obrigado.

    Paulo Henrique Vieira

    quinta-feira, 18 de novembro de 2010 13:06
  • Boas Paulo,

    O problema é quando você tenta referenciar o serviço no cliente?

    Você pode mostrar a configuração completa do teu serviço?!
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 13:30
    Moderador
  • Olá Israel,

     

    isto mesmo quando tento referenciar o serviço no cliente. Segue o código.

     ServiceHost host = new ServiceHost(typeService, uri);
    
    
            //=========================== ServiceAuthorizationBehavior =======================================================
            if (host.Description.Behaviors.Find<ServiceAuthorizationBehavior>() != null)
            {
              ((ServiceAuthorizationBehavior)host.Description.Behaviors[2]).PrincipalPermissionMode = PrincipalPermissionMode.Custom;
              ((ServiceAuthorizationBehavior)host.Description.Behaviors[2]).ServiceAuthorizationManager = new AuthorizationManager();
    
              List<IAuthorizationPolicy> policies1 = new List<IAuthorizationPolicy>();
              AuthorizationPolicy AuthorizationPolicy = new AuthorizationPolicy();
              policies1.Add(AuthorizationPolicy);
              ((ServiceAuthorizationBehavior)host.Description.Behaviors[2]).ExternalAuthorizationPolicies = policies1.AsReadOnly();
            }
            else
            {
              ServiceAuthorizationBehavior sab = new ServiceAuthorizationBehavior();
              sab.PrincipalPermissionMode = PrincipalPermissionMode.Custom;
              sab.ServiceAuthorizationManager = new AuthorizationManager();
              List<IAuthorizationPolicy> policies1 = new List<IAuthorizationPolicy>();
              AuthorizationPolicy AuthorizationPolicy = new AuthorizationPolicy();
              policies1.Add(AuthorizationPolicy);
              sab.ExternalAuthorizationPolicies = policies1.AsReadOnly();
            }
            //=========================== ServiceAuthorizationBehavior =========================================================
    
    
    
            //=========================== ServiceDebugBehavior =================================================================
            if (host.Description.Behaviors.Find<ServiceDebugBehavior>() != null)
            {
              host.Description.Behaviors.Find<ServiceDebugBehavior>().IncludeExceptionDetailInFaults = true;
            }
            else
            {
              ServiceDebugBehavior sdb = new ServiceDebugBehavior();
              sdb.IncludeExceptionDetailInFaults = config.IncludeExceptionDetailInFaults;
            }
            //=========================== ServiceDebugBehavior ===============================================================
    
    
    
    
            //=========================== ServiceMetadataBehavior ============================================================
            if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() != null)
            {
              host.Description.Behaviors.Find<ServiceMetadataBehavior>().HttpGetEnabled = true;
            }
            else
            {
              ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
              smb.HttpGetEnabled = config.HttpGetEnabled;
              host.Description.Behaviors.Add(smb);
            }
            //=========================== ServiceMetadataBehavior ===========================================================
    
    
            //=========================== ServiceThrottlingBehavior =========================================================
            if (host.Description.Behaviors.Find<ServiceThrottlingBehavior>() != null)
            {
              host.Description.Behaviors.Find<ServiceThrottlingBehavior>().MaxConcurrentCalls = 200000;
              host.Description.Behaviors.Find<ServiceThrottlingBehavior>().MaxConcurrentInstances = 200000;
              host.Description.Behaviors.Find<ServiceThrottlingBehavior>().MaxConcurrentSessions = 200000;
            }
            else
            {
              ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior();
              stb.MaxConcurrentCalls = int.Parse(config.MaxConcurrentCalls);
              stb.MaxConcurrentInstances = int.Parse(config.MaxConcurrentInstances);
              stb.MaxConcurrentSessions = int.Parse(config.MaxConcurrentSessions);
              host.Description.Behaviors.Add(stb);
            }
            //=========================== ServiceThrottlingBehavior =========================================================
    
    
            //=========================== ServiceCredentials =========================================================
    
            if (host.Description.Behaviors.Find<ServiceCredentials>() != null)
            {
              host.Description.Behaviors.Find<ServiceCredentials>().UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
              host.Description.Behaviors.Find<ServiceCredentials>().UserNameAuthentication.CustomUserNamePasswordValidator = new UserAuthentication();
            }
            else
            {
              ServiceCredentials sc = new ServiceCredentials();
              sc.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
              sc.UserNameAuthentication.CustomUserNamePasswordValidator = new UserAuthentication();
              host.Description.Behaviors.Add(sc);
            }
    
            //=========================== ServiceCredentials =========================================================
    
            TcpUsernameBinding tcpUB = new TcpUsernameBinding();
            tcpUB.SetMessageVersion(MessageVersion.Soap11WSAddressing10);
            tcpUB.ListenBacklog = int.Parse(config.ListenBacklog);
            tcpUB.MaxBufferPoolSize = int.Parse(config.MaxBufferPoolSize);
            tcpUB.MaxBufferSize = int.Parse(config.MaxBufferSize);
            tcpUB.MaxConnections = int.Parse(config.MaxConnections);
            tcpUB.MaxReceivedMessageSize = int.Parse(config.MaxReceivedMessageSize);
            tcpUB.PortSharingEnabled = config.PortSharingEnabled;
    
    
            host.AddServiceEndpoint(
              typeInterface,
              tcpUB,
              string.Empty);
    
    
            host.AddServiceEndpoint(
              typeof(IMetadataExchange),
              MetadataExchangeBindings.CreateMexHttpBinding(),
              "mex");
    
    Muito obrigado.

    quinta-feira, 18 de novembro de 2010 13:56
  • Boas Paulo,

    E com relação ao seu contrato e classes que está recebendo ou devolvendo. Não há nenhuma espécie de herança envolvida?
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 14:52
    Moderador
  • Israel existe sim uma herança:


    public class Services : BaseService, IServices

    onde BaseService existe dois metodos Start e Stop.

     

     

    Muito Obrigado.

    quinta-feira, 18 de novembro de 2010 14:58
  • Boas Paulo,

    Pode me mostrar o seu contrato e os tipos que estão envolvidos nele?
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 15:06
    Moderador
  • Claro Israel.

    Eu criei um serviço de teste sem herança para ver o comportamento, mas não mudou nada.Segue:

        [ServiceContract]
        public interface IPluginLibrary
        {
            [OperationContract]
            string GetData();

        }


        [EmpresaBehavior(TypeProtocol.Http,TypeProtocol.NetTcp)]
        public class PluginLibrary : IPluginLibrary
        {
            public string GetData()
            {
                return "Passed Test";
            }
        }

    O Host foi criado para funcionar com plugins onde vc coloca o assembly do serviço (Ex: PluginLibrary.dll no diretorio do host), por isto eu criei o atributo EmpresaBehavior. para acha-lo via reflection, assim quando o host inicia ele aplica a esta dll as configurações padrão da Empresa.

     

    Espero que tenha sido claro.

     

    Muito obrigado.

     

    quinta-feira, 18 de novembro de 2010 15:24
  • Boas Paulo,

    De certeza que o endereço que você está publicando o serviço é o mesmo que está tentando referenciar na aplicação?

    Se você publica o documento WSDL via HTTP e define a propriedade HttpGetEnabled como True, então você deveria visualizar o WSDL no próprio browser.
    http://www.israelaece.com
    quinta-feira, 18 de novembro de 2010 15:31
    Moderador
  • Boas Israel,

     

    O problema era no endereço criado automaticamente pelo host, ele não estava colocando a barra no final do endereço.

     

     

    Muito obrigado.

    quinta-feira, 18 de novembro de 2010 20:41