Como consumir o serviço WCF do BizTalk 2010
-
27-10-2019 - |
Pergunta
Tenho um serviço da web que preciso consumir da orquestração do BizTalk. Eu defini esquemas de mensagens que uso no BizTalk, eles se parecem com
<?xml version="1.0" encoding="utf-16"?>
<xs:schema
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns="http://www.myapp.com/schemas/IntegrationApplication-instance"
xmlns:b="http://schemas.microsoft.com/BizTalk/2003"
xmlns:ns0="https://DTIB.PropertySchema"
elementFormDefault="qualified"
targetNamespace="http://www.myapp.com/schemas/IntegrationApplication-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation=".\CommonTypes.xsd" />
<xs:element name="ProviderRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="HeaderType" />
<xs:element name="Parameters" type="ParametersType" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
No serviço WCF, tenho métodos definidos como
public ProviderResponse Provide(ProviderRequest providerRequest) {...}
onde ProviderRequest
é definido como
[DataContract(Namespace = "http://www.myapp.com/schemas/IntegrationApplication-instance")]
public class ProviderRequest
{
[DataMember]
public Header Header { get; set; }
[DataMember]
public Parameter[] Parameters { get; set; }
}
Quando eu crio a porta de envio e tento enviar uma mensagem ProviderRequest, ela falha com erros diferentes.
Qual é o melhor método para consumir um serviço WCF que usa os mesmos esquemas definidos no projeto BizTalk?
Solução
Sua melhor aposta é executar uma instância do seu serviço e, em seguida, "Adicionar Itens Gerados" -> "Consumir Serviço WCF" de dentro do Visual Studio.
Isso irá gerar seus XSDs de mensagem de serviço e tipos de porta e é uma maneira de baixo atrito de fazer o que você está tentando fazer.
Outras dicas
Pergunta bastante interessante, um cenário que pode acontecer a outras pessoas.
Aqui estão algumas sugestões.
Caso mais comum: você precisa consumir um serviço e deseja usar essas mensagens - Use a sugestão de hugh "Adicionar item gerado ..."
Caso menos comum: você já criou um esquema que um serviço também usa (o mesmo) - Use a sugestão de hugh "Adicionar item gerado ..." - Remova o esquema que é uma duplicata, seja seu ou do criado
Caso não tão comum: você deseja consumir dois serviços que usam o mesmo esquema - Use a sugestão de hugh "Adicionar item gerado ..." - Remova o esquema que é uma duplicata de um dos gerados
Caso nunca aconteceu comigo: você já criou um esquema que um serviço também usa (NÃO o mesmo, mas o mesmo nome de raiz e espaço de nomes) - Não há nada a fazer, isso não funcionará (fora da caixa)