2009-07-28 3 views
0

Я работаю с довольно большой строкой запроса (~ 30 + параметров) и пытаюсь передать их в службу WCF, которую я установил.WCF UriTemplate с большими строками запроса

Я столкнулся с несколькими проблемами, особенно с полем UriTemplate. Эта служба настроена для доступа к стороннему Api, поэтому строка запроса может содержать или не содержать все параметры. Мне любопытно, что лучший способ - построить строку запроса и передать ее службе WCF или передать каждый параметр (и в некоторых случаях String.Empty) индивидуально.

В настоящее время я пытаюсь динамически создавать строку запроса, однако ударил стену с ошибкой 403, когда я пытаюсь передать всю строку («? Prm1 = val & prm2 = val») в uritemplate из «ApiTool.jsp {query}», или я нахожу недопустимый ответ uritemplate из-за того, что у меня нет имен/значений.

+0

Я не уверен, что понимаю сценарий. Можете ли вы опубликовать упрощенный пример? –

+0

Несомненно. Первоначально я что-то вдоль линий пытается: ResponseFormat = WebMessageFormat.Xml, UriTemplate = «TargetApi.jsp {запрос}» я передать пользовательские встроенные строки запроса в полном объеме через этот параметр. Я не понимал, что это может быть запрещено до недавнего времени. Я вернулся и провел рефакторинг (возможно, для лучшего), в результате чего в строке запроса были указаны правильные пары значений значений: UriTemplate = "TargetApi.jsp? Key = {key} & otherParam = {otherParam } " Хотя второй способ является подробным из-за большого количества переменных, это представляется необходимым в этом сценарии. –

ответ

0

Я уверен, что вам нужно будет перечислить параметры по отдельности. В противном случае, UriTemplate будет в конечном итоге спасаясь вещи для вас:

var ut = new UriTemplate("Api.jsp{query}"); 
    var u = ut.BindByName(new Uri("http://localhost"), new Dictionary<string, string>() { { "query", "?param1=a&param2=b" } }); 
    Console.WriteLine(u); // http://localhost/Api.jsp%3Fparam1=a&param2=b 
+0

После того, как я углубился в это, я должен согласиться. Это немного громоздко, когда речь идет о динамическом количестве параметров (т. Е. Param1, param2 ... paramN), но я не смог увидеть способ его решения. –

0

Вы можете «экранирования в» строку запроса с IClientMessageInspector.

public class UriInspector: IClientMessageInspector 
{ 
    public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 

     // change/replace request.Headers.To Uri object; 
     return null; 
    } 
} 

См. MSDN как добавить это в свой объект Endpoint.

Смежные вопросы