Как сделать так, чтобы мой контракт сообщений WCF отображался в импортированной схеме? - PullRequest
0 голосов
/ 24 сентября 2010

Клиент предоставил нам схемы и wsdl для сервиса, который они хотели бы разработать. Когда я запрыгнул на проект, уже была внедрена служба. Когда я открываю файл svc в IE, он показывает обычную команду svcutil и т. Д. Когда я выполняю детализацию и смотрю схемы, импортируемые используемым нами wsdl, я замечаю, что MessageContracts не отображаются в схемы. Что я могу сделать, чтобы MessageContracts отображался так, чтобы схемы были идеальными?

Например, клиент дал нам это,

<xs:schema elementFormDefault="qualified" targetNamespace="http://ws.tcore.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.tcore.com">
<xs:import schemaLocation="ATISDataContracts.xsd" namespace="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:import schemaLocation="Serialization.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
<xs:element name="ASICDetectorInventoryRequestMC">
 <xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="DetectorInventoryRequest" nillable="true" type="q1:DetectorInventoryRequestDC" xmlns:q1="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
 </xs:sequence>
 </xs:complexType>
 </xs:element>
  <xs:element name="ConnectionRequest" nillable="true" type="q2:ConnectionRequestDC" xmlns:q2="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 

но когда я детализирую wsdl из моего svc и скопировал / вставил импорт схемы, я заметил, что контракт сообщения отсутствует, хотя "q1:" и т. Д. Верны. Моя схема выглядит следующим образом.

  <xs:schema elementFormDefault="qualified" targetNamespace="http://ws.tcore.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.tcore.com">
<xs:import schemaLocation="http://localhost:9305/mex?xsd=xsd1" namespace="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:import schemaLocation="http://localhost:9305/mex?xsd=xsd0" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
<xs:element name="DetectorInventoryRequest" nillable="true" type="q1:DetectorInventoryRequestDC" xmlns:q1="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 
<xs:element name="ConnectionRequest" nillable="true" type="q2:ConnectionRequestDC" xmlns:q2="http://schemas.datacontract.org/2004/07/tcore.ATISDataContracts" /> 

По большей части это выглядит так же. Как я могу заставить мои элементы MessageContract появляться в схеме?

Вот пример сообщения c # code

namespace tcore.ATISDataContracts
{
  [MessageContract(IsWrapped = false)]
  public class ASICDetectorInventoryRequestMC
  {
      [MessageHeader]
      public ConnectionRequestDC ConnectionRequest;

      [MessageBodyMember]
      public DetectorInventoryRequestDC DetectorInventoryRequest;
  }
}

Их схема показывает сложный тип, но моя производная схема показывает только элемент, а не сложный тип. Что я здесь не так делаю? Любая помощь или советы приветствуются.

Спасибо за помощь,
~ ck в Сан-Диего

1 Ответ

1 голос
/ 24 сентября 2010

По умолчанию, когда генерируются ваши файлы WSDL, части схемы разделяются на другие файлы импорта, которые вряд ли будут соответствовать импортам, которые могли быть использованы изначально (например, в предоставленном клиентом файле WSDL).Если вы перейдете к импортированным XSD-файлам (например, http://localhost:9305/mex?xsd=xsd1,), вы должны найти некоторые элементы, которые, как вам кажется, отсутствуют.

...