<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode>
<faultstring xml:lang="pt-BR">Data is Null. This method or property cannot be called on Null values.</faultstring>
<detail>
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true"/>
<InnerException i:nil="true"/>
<Message>Data is Null. This method or property cannot be called on Null values.</Message>
<StackTrace>Server stack trace:
at System.Data.SqlClient.SqlBuffer.get_Int32()
at Vtex.Commerce.CatalogSystem.DataStore.SqlServer.CategoryDalc.GetMaxId() in F:\BuildAgent\work\67af720f163d9625\src\Catalog System\Vtex.Commerce.CatalogSystem.DataStore\SqlServer\Generated\CategoryDalc.cs:line 352
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Vtex.Commerce.CatalogSystem.CategoryFactory.GetMaxId()
at Vtex.Commerce.WebApps.AdminWcfService.Service.CategoryInsertUpdate(CategoryDTO category) in F:\BuildAgent\work\67af720f163d9625\src\Web Applications\Vtex.Commerce.WebApps.AdminWcfService\Service.svc.cs:line 3511
at SyncInvokeCategoryInsertUpdate(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>
<Type>System.Data.SqlTypes.SqlNullValueException</Type>
</ExceptionDetail>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
O mesmo ocorre testando pelo SoapUI. Alguém saberia dizer o que posso estar fazendo de errado? Desde já agradeço.
@Bruno Almeida Estranho, testei enviar esse mesmo XML num ambiente, pelo Postman, e funcionou. Não consegui identificar algum erro na sua requisição...
@Eduardo Gomes antes de mais nada obrigado pela atenção.
Eu testei pelo Postman também, ocorreu o mesmo erro que no SoapUI e no meu código de integração. Segue algumas informações a mais:
A URL que estou utilizando é: http://webservice-lojainfox.vtexcommerce.com.br/AdminWebService/Service.svc?wsdl
Estou definindo também a SOAPAction assim: http://tempuri.org/IService/CategoryInsertUpdate
Utilizando Basic Authentication, o usuário que estou usando possui a role webservice no meu License Manager.
OBS: Meu ambiente é novo, apenas para integração, não tenho nada cadastrado nele ainda, por isso estou começando os testes agora, só testei o envio de departamentos e já ocorreu este erro, não testei qualquer outro envio além de departamentos ainda.
@Bruno Almeida Parece-me tudo certo com os passos que seguiu. Tentei mais uma vez com seu XML e foi. Inseriu os headers desta forma? https://snag.gy/3gBkCu.jpg
Para referência, quando cadastro categorias via Postman, parto do XML abaixo. Por ser departamento, excluo a linha FatherCategoryId e o ID, se não precisar forçar, pode excluir também.
@Eduardo Gomes , segue um print de como estou fazendo a requisição no Postman:https://snag.gy/U19P3C.jpg
Pelo que eu vi a diferença é que no header você mandou a propriedade authentication duas vezes, eu coloquei meu usuário e senha na aba Authorization do Postman como Basic Authentication, mas acho que não é este o problema pois quando informo uma senha errada ele retorna status 401.
@Eduardo Gomes , testei com o endpoint no formato que você passou, apenas mudando para o meu ACCOUNT-NAME, porém obtive o mesmo erro. Fiquei na dúvida apenas referente a parte de autenticação que você informou no header do Postman, gerou duas propriedades authentication com dados diferentes aparentemente.
Aparentemente o que está acontecendo não é nem um erro de comunicação, e sim uma exceção da aplicação, vendo por essa parte:
Server stack trace:
at System.Data.SqlClient.SqlBuffer.get_Int32()
at Vtex.Commerce.CatalogSystem.DataStore.SqlServer.CategoryDalc.GetMaxId() in F:\BuildAgent\work\67af720f163d9625\src\Catalog System\Vtex.Commerce.CatalogSystem.DataStore\SqlServer\Generated\CategoryDalc.cs:line 352
Consegui resolver simplesmente forçando o cadastro do Id com a tag:
<vtex:Id>{{vtexId}}</vtex:Id>
Pela documentação, vi que a plataforma gera o Id, porém eu não tinha nenhum departamento cadastrado ainda. Pelo erro apresentado, imagino que ele tenha tentado pegar o máximo Id cadastrado para gerar o próximo, e como não tinha nenhum, ocorreu erro ao tentar converter Null para Int32. Ao forçar o cadastro do Id, funciona normalmente. Porém vejo isto como sendo um bug da plataforma.