2011-09-07 2 views
1

BizTalk 오케스트레이션에서 소비해야하는 웹 서비스가 있습니다. 내가 BizTalk에서 사용 내가 정의한 메시지 스키마, 그들은 내가 방법 ProviderRequestBizTalk 2010에서 WCF 서비스를 사용하는 방법

 [DataContract(Namespace = "http://www.myapp.com/schemas/IntegrationApplication-instance")] 
     public class ProviderRequest 
     { 
      [DataMember] 
      public Header Header { get; set; } 

      [DataMember] 
      public Parameter[] Parameters { get; set; } 
     } 

과 같이 정의된다

public ProviderResponse Provide(ProviderRequest providerRequest) {...} 

같이 정의 WCF 서비스에서

<?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> 

처럼 송신 포트를 작성하고 ProviderRequest 메시지를 보내려고하면 다른 오류로 실패합니다.

BizTalk 프로젝트에서 정의한 것과 동일한 스키마를 사용하는 WCF 서비스를 사용하는 가장 좋은 방법은 무엇입니까?

답변

1

가장 좋은 방법은 서비스의 인스턴스를 실행 한 다음 Visual Studio 내에서 "생성 된 항목 추가"-> "소비 WCF 서비스"를 실행하는 것입니다.

이렇게하면 서비스 메시지 XSD 및 포트 유형이 생성되며 수행하려는 작업을 저 마찰로 해결할 수 있습니다.

+0

시도했습니다. 이 방법을 사용하면 "수신 파이프 라인을 실행하는 동안 오류가 발생했습니다."Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version = 3.0.1.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 "원본 : "XML disassembler"수신 포트 : "WcfReceivePort_BizTalkWcfService/Provider"URI : "/BizTalkWcfService/Provider.svc"이유 : 여러 스키마가 메시지 유형과 일치하므로 문서 사양을 찾을 수 없습니다. " XMLReceive 파이프 라인 속성에서 알 수없는 메시지 허용 옵션을 켜면 작동합니다. –

+0

@Javos - 이것은 버전 문제입니다. 동일한 메시지가 정의 된 두 개의 어셈블리가 있으므로 BizTalk가 xml을 메시지로 deserialize하려고 시도 할 때 사용할 메시지를 모릅니다. 이것은 나쁜 관행이며 하나 또는 다른 어셈블리에서 메시지 정의를 제거해야하므로 런타임 오류를 유발할 수 있습니다. 이러한 어셈블리는 반드시 동일한 BizTalk 응용 프로그램의 일부는 아닙니다. –

+0

그래도 내 시스템간에 공유 메시지 스키마를 사용하려면 어떻게해야합니까? –

0

아주 재미있는 질문입니다. 다른 사람들에게 일어날 수있는 시나리오입니다.

다음은 몇 가지 제안 사항입니다.

가장 일반적인 경우 : 당신은 서비스를 소비 할 필요가 그 메시지를 사용하려면 - "... 생성 된 항목 추가"를 사용하여 휴의 제안

덜 일반적인 경우를 : 이미 생성 한 서비스는 사용 스키마 (같은) - 사용 휴의 제안 을 "... 생성 된 항목 추가"- 자신 또는 생성

그래서 일반적이지 케이스 중 하나를 중복 스키마를 제거합니다 : 동일한 스키마 을 사용하여이 개 서비스를 사용하려면 -를 사용하여 휴의 제안은 "생성 된 항목 추가 ..." - 나 경우에 이런 일이 없었는데 적이 생성

중 하나에서 중복되는 스키마를 제거 : 서비스가 사용하는 스키마를 이미 만들었지 만 루트 이름과 이름 공간이 동일하지는 않습니다. - 아무 작업도 수행되지 않습니다 (기본 제공)