Pessoal,
Estou tentando consumir um SOAP a partir do C# mas tá dando um erro chamado “SOAP negociantion”. Alguem saberia o porque?
Obs. estou consumindo WS so SugarCRM
abraço
Resolvido pessoal. O App Config ficou assim:
<bindings>
<basicHttpBinding>
<binding name="SecureTransport">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://crm.acao.com/service/v4/soap.php" binding="basicHttpBinding" bindingConfiguration="SecureTransport" contract="sugar.sugarsoapPortType" name="SecureTransport"/>
</client>
</system.serviceModel>
Além disso, é preciso setar as credenciais em ClientCredentials (aqui eu tambem tiro a validade por certificado)
ClientCredentials.UserName.UserName = "XINT_SUGAR";
ClientCredentials.UserName.Password = "blah";
ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
Por último, dependendo da quantidade de informação trafegando, ele vai chiar, faça isso:
BasicHttpBinding binding = base.ChannelFactory.Endpoint.Binding as BasicHttpBinding;
binding.MaxReceivedMessageSize = 20000000;
binding.MaxBufferSize = 20000000;
base.ChannelFactory.Endpoint.Binding = binding;
foreach (OperationDescription op in base.ChannelFactory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>()
as DataContractSerializerOperationBehavior;
if (dataContractBehavior != null)
{
dataContractBehavior.MaxItemsInObjectGraph = 20000000;
}
}
Espero ter ajudado, obrigado!