Usuário com melhor resposta
Problema ao adicionar um serviço WCF (Forma imperativa).

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.
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- Marcado como Resposta Israel AeceModerator sexta-feira, 19 de novembro de 2010 10:13
Todas as Respostas
-
-
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
-
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 -
Olá Israel,
isto mesmo quando tento referenciar o serviço no cliente. Segue o código.
Muito obrigado.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");
-
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 -
-
Boas Paulo,
Pode me mostrar o seu contrato e os tipos que estão envolvidos nele?
http://www.israelaece.com -
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.
-
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- Marcado como Resposta Israel AeceModerator sexta-feira, 19 de novembro de 2010 10:13
-
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.
- Marcado como Resposta Israel AeceModerator sexta-feira, 19 de novembro de 2010 10:13
- Não Marcado como Resposta Israel AeceModerator sexta-feira, 19 de novembro de 2010 10:13