2009-07-28 2 views
0

다소 큰 쿼리 문자열 (~ 30 + 매개 변수)을 사용하고 있으며이를 설정 한 WCF 서비스에 전달하려고합니다.큰 쿼리 문자열을 사용하는 WCF UriTemplate

나는 특히 UriTemplate 필드와 관련된 몇 가지 문제에 봉착했습니다. 이 서비스는 타사 Api에 액세스하도록 설정되어 있으므로 쿼리 문자열에 모든 매개 변수가 포함되거나 포함되지 않을 수 있습니다. 가장 좋은 방법은 쿼리 문자열을 작성하여 WCF 서비스에 전달하거나 각 매개 변수 (그리고 경우에 따라 String.Empty)를 개별적으로 전달하는 것입니다.

현재 쿼리 문자열을 동적으로 작성하려고했지만 uritemplate에 전체 문자열 ("? prm1 = val & prm2 = val")을 전달하려고하면 403 오류가 발생합니다. "ApiTool.jsp {query}"가 아니거나, 이름/값 쌍이 나열되어 있지 않기 때문에 잘못된 uritemplate 응답을 받았습니다.

+0

시나리오를 잘 모르겠습니다. 간단한 예제를 게시 할 수 있습니까? –

+0

그래, 뭐. 원래 내가의 라인을 따라 뭔가를 시도했다 : ResponseFormat = WebMessageFormat.Xml, UriTemplate = "TargetApi.jsp {조회}" 내가이 매개 변수를 통해 전체에서 사용자 정의 내장 된 쿼리 문자열을 전달할 것입니다. 나는 이것이 최근까지는 허용되지 않을 수도 있다는 것을 깨닫지 못했습니다. 쿼리 문자열에서 올바른 이름 값 쌍으로 끝나고 약간의 리팩터링 (어쩌면 최선)을 완료했습니다. UriTemplate = "TargetApi.jsp? key = & key"& otherParam = {otherParam } " 많은 수의 변수로 인해 두 번째 방법이 장황하지 만이 시나리오에서는 필요합니다. –

답변

0

저는 매개 변수를 개별적으로 나열해야한다고 확신합니다. 그렇지 않으면, UriTemplate 당신을 위해 일을 탈출 종료됩니다 : 당신은 '언 이스케이프'IClientMessageInspector와 쿼리 문자열 수

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

이것에 깊이 들어가면 동의해야합니다. Paramaters의 역동적 인 양 (즉, param1, param2 ... paramN)을 다룰 때 약간 성가시다. 그러나 나는 그 주위에 방법을 볼 수 없었다. –

0

.

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

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

이 내용을 엔드 포인트 개체에 추가하는 방법을 참조하십시오.

관련 문제