2013-05-13 3 views
0

Я пытаюсь внедрить маршрутизацию на основе контента с использованием XPath в wcf.WCF-маршрутизация с использованием XPath: недействительное квалифицированное исключение имени

У меня есть библиотека классов, которая содержит контракт на обслуживание и контракт на предоставление данных, как показано ниже.

[ServiceContract(Namespace = "http://orders/")] 
public interface IService5 
{ 
    [OperationContract] 
    string GetData(int value); 
} 

[DataContract] 
public class Quantity 
{ 
    [DataMember] 
    public int value1 { get; set; } 

} 

Я создал одну услугу следующим образом:

public class Service5 : IService5 
{ 
    public string GetData(int value) 
    { 
     return string.Format("You entered in service 5: {0}", value); 
    } 
} 

И я пытаюсь реализовать маршрутизацию на основе «значение»

В app.config (внутри маршрутизатора проекта) я ВГА добавил следующее линии для пространства имен и фильтр XPath

<namespaceTable> 
    <add prefix="cc" namespace="http:orders/Quantity/"/> 
</namespaceTable> 
<filters> 
    <filter name="All" filterType="XPath" filterData="cc://value1 &gt; 500 " /> 

Но всякий раз, когда я запускаю код, я получаю исключение f или 'cc: // value1 > 500' как исключение квалифицированного имени.

Как я могу решить эту проблему?

+0

Porque downvote? –

ответ

1

Есть множественного вещь неправильно здесь:

  1. Класса, Quantity, на котором, по всей видимости нужно применить фильтр не фигурировать в вашем договоре обслуживания на всех, поэтому будет полностью отсутствовать в XML для фильтрации.
  2. Пространство имен в конфигурации вашего маршрутизатора начинается с http:orders, когда начинается пространство имен сервисного контракта http://orders.
  3. Пространство имен в конфигурации вашего маршрутизатора содержит /Quantity, когда пространство имен сервисных контрактов отсутствует.
  4. Фильтр куб.см XPath: // значение1 не является допустимым
  5. XPath
  6. ---
+0

На самом деле спасибо за такой быстрый ответ и очень жаль этих глупых ошибок. Как я упоминал во 2-й точке, я использую http: // заказы в разделе http: orders и удаляет количество из пространства имен. Тем не менее, там есть реи. И я также не могу понять вашу первую и четвертую точку. вы можете объяснить это вкратце. Pushkar – user2206336

+0

Основная проблема заключается в том, что вы, кажется, фильтруете свойство сообщения, которое не будет существовать в запросе, который вы хотите использовать на основе этого маршрута. Все остальные проблемы - это просто проблемы с кодированием. Это проблема дизайна. Вам необходимо ввести тип количества в свой запрос, прежде чем вы сможете маршрутизировать это значение. –

+0

Я действительно думал, что это может быть проблема с сериализацией, поэтому я поместил ее в Property. На самом деле в моем оригинальном случае у меня нет данных как контракт с данными. Я использовал «значение» (который является параметром для функции) непосредственно в выражении XPath. как filterData = "cc: // значение > 500. Но все же он показывает одно и то же исключение. – user2206336

0

Эй Проблема заключается в линии

filter name="All" filterType="XPath" filterData="cc://value1 &gt; 500 " 

Это должно быть

<filter name="All" filterType="XPath" filterData="//cc:value1 &gt; 500 " /> 

наблюдать cc: // в коде ур.

Это позволит решить проблему ур