.asmx ファイルを指すアプリケーションのサービス参照として設定された Soap WSDL があります。レスポンス ソープ エンベロープに問題があります。受信コードで作成されたときに値が存在するコレクションオブジェクトがあります。ソープ エンベロープがメモリ ストリームになり、呼び出し元のクライアントに送り返されようとしているところまでコードを進めると、コレクションに値が入力されます。ただし、もう一度 F10 を押すと、空のコレクションで呼び出し元のクライアントに戻ります。
私が使用しているクラスの WSDL は次のとおりです。
<complexType name="Step">
<complexContent>
<extension base="tns:APIObject">
<sequence>
<element name="StepType" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="Description" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="Automation" minOccurs="0" type="tns:Automation" />
<element name="Sequence" minOccurs="0" type="xsd:int" />
<element name="Activities" minOccurs="0" maxOccurs="1">
<complexType>
<sequence>
<element name="Activity" type="tns:AutomationActivity" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="StepInstance">
<complexContent>
<extension base="tns:Step">
<sequence>
<element name="StepDefinition" type="tns:Step" minOccurs="0" />
<element name="AutomationInstance" type="tns:AutomationInstance" minOccurs="0" />
<element name="ActivityInstances" minOccurs="0">
<complexType>
<sequence>
<element name="ActivityInstance" type="tns:AutomationActivityInstance" minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AutomationActivity">
<complexContent>
<extension base="tns:APIObject">
<sequence>
<element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="Description" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="IsActive" minOccurs="0" maxOccurs="1" type="xsd:boolean" />
<element name="Definition" minOccurs="0" maxOccurs="1" type="tns:APIObject" />
<element name="Automation" minOccurs="0" type="tns:Automation" />
<element name="Step" minOccurs="0" type="tns:Step" />
<element name="Sequence" minOccurs="0" type="xsd:int" />
<element name="ActivityObject" minOccurs="0" type="tns:APIObject" />
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AutomationActivityInstance">
<complexContent>
<extension base="tns:AutomationActivity">
<sequence>
<element name="ActivityID" type="xsd:string" minOccurs="0" maxOccurs="1"></element>
<element name="AutomationID" minOccurs="0" maxOccurs="1" type="xsd:string" />
<element name="SequenceID" minOccurs="0" maxOccurs="1" type="xsd:int" />
<element name="Status" minOccurs="0" maxOccurs="1" type="xsd:int" />
<element name="StatusLastUpdate" minOccurs="0" maxOccurs="1" type="xsd:dateTime" />
<element name="StatusMessage" type="xsd:string" minOccurs="0" />
<element name="ActivityDefinition" type="tns:AutomationActivity" minOccurs="0" />
<element name="AutomationInstance" type="tns:AutomationInstance" minOccurs="0" />
<element name="StepInstance" type="tns:StepInstance" minOccurs="0" />
<element name="ScheduledTime" minOccurs="0" maxOccurs="1" type="xsd:dateTime" />
<element name="StartTime" minOccurs="0" maxOccurs="1" type="xsd:dateTime" />
<element name="CompletedTime" minOccurs="0" maxOccurs="1" type="xsd:dateTime" />
</sequence>
</extension>
</complexContent>
</complexType>
これは、シリアライゼーションと MemoryStream への変換前の応答 Envelop です。
<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<RetrieveResponseMsg xmlns=""> <OverallStatus>MoreDataAvailable</OverallStatus>
<RequestID>0216f0bb-9d4a-455f-8517-5856f2e6f65d</RequestID>
<Results xsi:type="AutomationInstance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PartnerKey xsi:nil="true" />
<CreatedDate>2013-01-11T12:18:20.453</CreatedDate>
<ModifiedDate>2013-01-11T12:18:25.27</ModifiedDate>
<ObjectID xsi:nil="true" />
<CustomerKey>0aeb9113-14ac-f480-cb35-efaf4439dd34</CustomerKey>
<IsPlatformObject>true</IsPlatformObject>
<Name></Name>
<Description/>
<InteractionObjectID>7c9a50f8-645d-48f2-a023-9aea4a31e294</InteractionObjectID>
<IsActive>false</IsActive>
<ScheduledTime>2013-01-11T12:01:53.543</ScheduledTime>
<AutomationID>7c9a50f8-645d-48f2-a023-9aea4a31e294</AutomationID>
<StepInstances>
<StepInstance>
<PartnerKey xsi:nil="true" />
<ObjectID xsi:nil="true" />
<StepDefinition>
<PartnerKey xsi:nil="true" />
<ObjectID xsi:nil="true" />
<Name />
<Description />
<Sequence>0</Sequence>
<Activities><Activity>
<PartnerKeyxsi:nil="true"/>
<PartnerProperties>
<Name>PartnerApiObjectTypeId</Name> <Value>42</Value> </PartnerProperties>
<CreatedDate>2013-01-11T12:00:20.767</CreatedDate>
<ObjectID>9e34164a-5089-4fe3-aee3-33f0a472de6f</ObjectID>
<CustomerKey>ebf044ef-8266-433f-b424-cc0aeb3735bd</CustomerKey>
<Name>test</Name>
<Description />
<IsActive>true</IsActive>
</Activity></Activities>
</StepDefinition>
</StepInstance>
</StepInstances>
<StartTime>2013-01-11T12:18:20.447</StartTime>
<CompletedTime>2013-01-11T12:18:25.27</CompletedTime>
</Results>
</RetrieveResponseMsg>
</soap:Body>
StepInstances は、私の問題に焦点を当てたコレクションです。ご覧のとおり、期待どおりに入力されています。
これは、エンベロープに変換された MemoryStream です。
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">
<soap:Header> <wsa:Action>RetrieveResponse</wsa:Action>
<wsa:MessageID>urn:uuid:a470ddfb-e032-4291-90e2-ce8ffb2b6a12</wsa:MessageID>
<wsa:RelatesTo>urn:uuid:4b5f3202-2207-4691-b33c-36f8a8ff799f</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestampwsu:Id=\"Timestamp-4464e3e0-c473-45e8-865f-21b8a0134927\">
<wsu:Created>2013-01-16T22:04:18Z</wsu:Created>
<wsu:Expires>2013-01-16T22:09:18Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<RetrieveResponseMsg xmlns=\"">
<OverallStatus>MoreDataAvailable</OverallStatus>
<RequestID>e25b58e1-5ad7-4cf6-862b-429354f92aca</RequestID>
<Results xsi:type=\"AutomationInstance\">
<PartnerKey xsi:nil=\"true\" />
<CreatedDate>2013-01-11T12:18:20.453</CreatedDate>
<ModifiedDate>2013-01-11T12:18:25.27</ModifiedDate>
<ObjectID xsi:nil=\"true\" />
<CustomerKey>0aeb9113-14ac-f480-cb35-efaf4439dd34</CustomerKey>
<IsPlatformObject>true</IsPlatformObject>
<Name></Name>
<Description/>
<InteractionObjectID>7c9a50f8-645d-48f2-a023-9aea4a31e294</InteractionObjectID>
<IsActive>false</IsActive>
<ScheduledTime>2013-01-11T12:01:53.543</ScheduledTime>
<AutomationID>7c9a50f8-645d-48f2-a023-9aea4a31e294</AutomationID>
<StepInstances>
<StepInstance>
<PartnerKey xsi:nil=\"true\" />
<ObjectID xsi:nil=\"true\" />
<StepDefinition>
<PartnerKey xsi:nil=\"true\" />
<ObjectID xsi:nil=\"true\" />
<Name />
<Description />
<Sequence>0</Sequence>
<Activities><Activity>
<PartnerKey xsi:nil=\"true\" />
<PartnerProperties>
<Name>PartnerApiObjectTypeId</Name><Value>42</Value>
</PartnerProperties>
<CreatedDate>2013-01-11T12:00:20.767</CreatedDate>
<ObjectID>9e34164a-5089-4fe3-aee3-33f0a472de6f</ObjectID>
<CustomerKey>ebf044ef-8266-433f-b424-cc0aeb3735bd</CustomerKey>
<Name>test</Name>
<Description/>
<IsActive>true</IsActive></Activity></Activities>
</StepDefinition>
</StepInstance>
</StepInstances>
<StartTime>2013-01-11T12:18:20.447</StartTime>
<CompletedTime>2013-01-11T12:18:25.27</CompletedTime>
</Results>
</RetrieveResponseMsg>
</soap:Body>
それが MemoryStream に入った後、呼び出し元のクライアントに送り返されます。オブジェクトを見ると、StepInstances は null です。
また、投稿した WSDL は一部であり、主に問題のあるクラスであることに注意してください。返されたエンベロープは、これらのクラスを含むより大きなクラスであり、投稿するには多すぎました。
しかし、受信クライアントからステップインする最後のコードでは、メモリストリームが読み込まれます。次に f10 を押すと、呼び出し元のクライアントにオブジェクトが戻り、コレクションが null になります。
これが理にかなっており、誰かがそれに光を当てることができることを願っています. 必要なデータがあれば、投稿してみます。
また、アクセスできるのは .wsdl ファイルだけであり、実際の WCF プロジェクトやクラスではないことにも注意してください。
サービス参照を構成する場合: Collection Type には Generic.List を選択し、Dictionary Type には Generic.Dictionary を選択しました。
更新: wsdl 内の APIObject は次のようになります
<complexType name="APIObject">
<sequence>
<element name="Client" type="tns:ClientID" minOccurs="0" maxOccurs="1"></element>
<element name="PartnerKey" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1"></element>
<element name="PartnerProperties" type="tns:APIProperty" minOccurs="0" maxOccurs="unbounded"></element>
<element name="CreatedDate" type="xsd:dateTime" minOccurs="0" maxOccurs="1"></element>
<element name="ModifiedDate" type="xsd:dateTime" minOccurs="0" maxOccurs="1" nillable="true"></element>
<element name="ID" type="xsd:int" minOccurs="0" maxOccurs="1"></element>
<element name="ObjectID" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1"></element>
<element name="CustomerKey" type="xsd:string" minOccurs="0" maxOccurs="1"></element>
<element name="Owner" type="tns:Owner" minOccurs="0" maxOccurs="1"></element>
<element name="CorrelationID" minOccurs="0" type="xsd:string" />
<element name="ObjectState" type="xsd:string" minOccurs="0" maxOccurs="1"></element>
<element name="IsPlatformObject" minOccurs="0" maxOccurs="1" type="xsd:boolean" />
</sequence>
</complexType>
更新 #2: WCF であると誤解しています。.wsdl ファイルにしかアクセスできず、コンパイル後にサービス参照を .asmx ファイルにポイントします。