2015-10-09 3 views
1

Я пытаюсь реплицировать веб-службу, имеющую довольно много проблем до сих пор, но это дает мне дополнительное горе.Проблемы с пространством имен WCF

Существующее приложение, которое будет использовать мою службу, не может быть изменено, но поскольку я могу нюхать данные, которые он отправляет, у меня есть довольно хорошая идея, в чем проблема.

Моя проблема заключается в том, что существующая веб-служба удалила пространство имен по параметрам, в результате чего моя служба не получила ничего по каждому параметру.

Моя служба получает «урну:» на бирке параметров:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SOAPEWebIntf-ISOAPEWeb2"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <urn:GetTestList> 
     <!--Optional:--> 
     <urn:TestGroupID>1024</urn:TestGroupID> 
     </urn:GetTestList> 
    </soapenv:Body> 
</soapenv:Envelope> 

Существующее приложение посылает это:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SOAPEWebIntf-ISOAPEWeb2"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <urn:GetTestList> 
     <!--Optional:--> 
     <TestGroupID>1024<TestGroupID> 
     </urn:GetTestList> 
    </soapenv:Body> 
</soapenv:Envelope> 

Любая идея, как я могу избавиться от урну: в параметр tag, WIHTOUT удаляет его из метки <urn:GetTestList>?

ответ

0

Я не думаю, что это можно сделать.

Вы можете установить пространство имен на уровне сервиса (с помощью атрибута ServiceContract), и вы можете также пространство имен значения от в пределах комплексного параметра (с помощью атрибута DataContract).

<soapenv:Envelope xmlns:soapenv="http://schemas...." xmlns:hi="hello"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <hi:MyOperation> 
     <hi:MyComplexParameter> 
      <Property1></Property1> 
     </hel:data> 
     .... 

Я играл с внедрением ISeralizable, но это, конечно, справедливо только для «сложных» видов - то есть вы можете сериализовать объект, однако вы хотите, купить вы не можете сериализовать int вне как .NET хочет, чтобы вы сериализовались. И даже если вы по-разному сериализуете свой объект, вы можете просто пропустить пространство внутри объекта, а не сам объект.

Наконец я пошел в Google и нашел это: Configure WCF service to accept unqualified parameter

Если вы абсолютно необходимо сделать это, вы, вероятно, осуществить то, что попадается сообщение WCF, прежде чем десериализации и обрабатывает этот вопрос. Это звучит довольно болезненно.