Вот ответ, который говорит, что я сделал, чтобы обойти эту проблему.Если кто-то может ответить лучше с помощью «почему», я отмечу это как ответ.
Проблема заключалась в том, чтобы включить пространство имен с XML из веб-службы в сочетании с использованием «targetNamespace» в xsd.
Изначально xsd выглядел примерно так:
<?xml version="1.0"?>
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://webservices.mycompany.com/MyPath/">
<!-- reset of xsd here -->
</xsd:schema>
Мне нужно было удалить атрибут targetNamespace.
<?xml version="1.0"?>
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
<!-- reset of xsd here -->
</xsd:schema>
Затем мне нужно было удалить ссылки на это пространство имен.в XML, возвращенном из веб-службы.Для этого я создал задачу «Сценарий» сразу после задачи «Веб-служба».Для этой задачи определена переменная ReadWriteVariable для переменной, содержащей текст XML, который будет передан в качестве источника потока данных в задаче потока данных.
Код сценария просто удаляет пространство имен из XML и возвращает его обратно.:
public void Main()
{
string xml = Dts.Variables["User::WebServicesOutput"].Value.ToString();
xml = xml.Replace(" xmlns=\"http://webservices.mycompany.com/MyPath/\"", "");
Dts.Variables["User::WebServicesOutput"].Value = xml;
Dts.TaskResult = (int)ScriptResults.Success;
}
(я понимаю, что код делаю это в одну строку, но это чище, и позволяет мне в дальнейшем изменять XML, если я захочу в будущем).
При этом источник XML правильно обрабатывает XML, переданный в переменной.