WCF 메서드를 임의의 URI에 바인딩하는 방법

최대

WebChannelFactory를 사용하여 WCF를 사용하여 다양한 기술로 구현 된 제어 할 수없는 일부 서비스를 호출합니다. WCF 관점에서 내 인터페이스에는 하나의 메서드 만 있습니다. "get-stuff"라고 부르겠습니다. 따라서 이러한 서비스에서는 http://www.service-a.com/get-stuff 또는 http://www.service-b.com/my-goodies/ 또는 http 와 같은 방법을 구현할 수 있습니다. : //www.service-c.com/retrieve-thing.php

모든 예제에서 특정 URI에 대한 메서드 바인딩이 WebGet / WebInvoke 특성의 UriTemplate 멤버를 통해 수행되는 것을 보았습니다. 그러나 이것은 "get-stuff"메소드의 모든 URI가 고정 된 템플릿을 따라야 함을 의미합니다. 예를 들어, UriTemplate = "/ get-stuff"를 만들 수 있으므로 메서드는 항상 / get-stuff에 바인딩됩니다.

그러나 내 메서드가 임의의 URI에 바인딩되기를 원합니다. BTW, 매개 변수는 POST 데이터로 전달되므로 URI를 메서드의 매개 변수에 바인딩하는 것에 대해 걱정할 필요가 없습니다.

최대

좋습니다. 런타임에 WebInvokeAttribute의 UriTemplate을 패치하여 문제에 대한 해결책을 찾았습니다. 내 단일 방법 WCF 인터페이스는 다음과 같습니다.

[ServiceContract]
interface IGetStuff
{
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    ResponseData GetStuff(RequestData request);
}

인터페이스에 대한 핸들을 얻는 방법은 다음과 같습니다.

//Find the last portion of the URI path
var afterLastPathSepPos = uri.LastIndexOf('/', uri.Length - 2) + 1;
var contractDesc = ContractDescription.GetContract(typeof(IGetStuff));

foreach (var b in contractDesc.Operations[0].Behaviors)
{
    var webInvokeAttr = b as WebInvokeAttribute;

    if (webInvokeAttr != null)
    {
        //Patch the URI template to use the last portion of the path
        webInvokeAttr.UriTemplate = uri.Substring(afterLastPathSepPos, uri.Length - afterLastPathSepPos);
        break;
    }
}

var endPoint = new ServiceEndpoint(contractDesc, new WebHttpBinding(), new EndpointAddress(uri.Substring(0, afterLastPathSepPos)));

using (var wcf = new WebChannelFactory<I>(endPoint))
{
    var intf = wcf.CreateChannel();
    var result = intf.GetStuff(new RequestData(/*Fill the request data here*/));   //Voila!
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

WCF C #의 호스팅 프로세스에서 ServiceHost의 메서드를 호출하는 방법

분류에서Dev

WCF TCP 바인딩의 경우 SSL 및 인증서를 활성화하는 방법

분류에서Dev

C # 뒤의 코드에서 팝 오버를 바인딩하는 방법

분류에서Dev

양식의 __init__ 함수에서 필드를 바인딩하는 방법

분류에서Dev

HierarchicalDataTemplate에서 부모의 DataContext에 바인딩하는 방법

분류에서Dev

메타 클래스의 __init__ 메서드 중에 메서드를 클래스에 바인딩하는 방법은 무엇입니까?

분류에서Dev

xaml의 목록에 itemSource를 바인딩하는 방법

분류에서Dev

Spark에서 복잡한 구조체 데이터 프레임의 변수를 바인딩하는 방법

분류에서Dev

Xtend에서 임의의 지점에 void 메서드를 남기는 방법

분류에서Dev

Objective-C initXXX 메서드를 동일한 유형의 인수가있는 Xamarin.iOS의 생성자에 바인딩하는 방법은 무엇입니까?

분류에서Dev

자바 : 동적 양의 인수를 메서드에 전달하는 방법

분류에서Dev

Cordova의 키보드 쇼에 이벤트를 바인딩하는 방법

분류에서Dev

Emacs 조직 모드에서 키 바인딩을 재정의하는 방법

분류에서Dev

리턴 키를 프레임 / 양식 자체의 함수에 바인딩하는 방법

분류에서Dev

C #에서 임의의 이미지 파일 집합을 초기화하고 XAML에서 임의로 바인딩하는 방법

분류에서Dev

Ninject에서 기존 바인딩의 범위를 변경하는 방법

분류에서Dev

WPF : OpenFileDialog의 결과를 이미 바인딩 된 TextBox.Text에 바인딩하는 방법

분류에서Dev

QML에서 임의의 양의 요소를 만드는 방법

분류에서Dev

QML에서 임의의 양의 요소를 만드는 방법

분류에서Dev

wpf에서 바인딩하는 방법

분류에서Dev

Spacy에서 임의의 언어를로드하는 방법

분류에서Dev

Mvvm Light에서 TextBox의 값을 뷰 모델에 바인딩하는 방법

분류에서Dev

자식 viewmodel에서 부모 viewmodel의 이벤트에 바인딩하는 방법

분류에서Dev

PowerApps의 드롭 다운에 데이터 원본을 바인딩하는 방법

분류에서Dev

JavaScript for-loop 내에서 위임 된 이벤트를 바인딩하는 방법

분류에서Dev

kentico 문서 유형의 데이터를 드롭 다운에 바인딩하는 방법은 무엇입니까?

분류에서Dev

xceed 데이터 그리드에서 콤보 박스의 Itemssource를 바인딩하는 방법

분류에서Dev

자바 스크립트에서 바인딩 된 함수의 'this'매개 변수를 재정의하는 방법

분류에서Dev

함수의 "this"를 클래스에 바인딩하는 방법 (React Component)

Related 관련 기사

  1. 1

    WCF C #의 호스팅 프로세스에서 ServiceHost의 메서드를 호출하는 방법

  2. 2

    WCF TCP 바인딩의 경우 SSL 및 인증서를 활성화하는 방법

  3. 3

    C # 뒤의 코드에서 팝 오버를 바인딩하는 방법

  4. 4

    양식의 __init__ 함수에서 필드를 바인딩하는 방법

  5. 5

    HierarchicalDataTemplate에서 부모의 DataContext에 바인딩하는 방법

  6. 6

    메타 클래스의 __init__ 메서드 중에 메서드를 클래스에 바인딩하는 방법은 무엇입니까?

  7. 7

    xaml의 목록에 itemSource를 바인딩하는 방법

  8. 8

    Spark에서 복잡한 구조체 데이터 프레임의 변수를 바인딩하는 방법

  9. 9

    Xtend에서 임의의 지점에 void 메서드를 남기는 방법

  10. 10

    Objective-C initXXX 메서드를 동일한 유형의 인수가있는 Xamarin.iOS의 생성자에 바인딩하는 방법은 무엇입니까?

  11. 11

    자바 : 동적 양의 인수를 메서드에 전달하는 방법

  12. 12

    Cordova의 키보드 쇼에 이벤트를 바인딩하는 방법

  13. 13

    Emacs 조직 모드에서 키 바인딩을 재정의하는 방법

  14. 14

    리턴 키를 프레임 / 양식 자체의 함수에 바인딩하는 방법

  15. 15

    C #에서 임의의 이미지 파일 집합을 초기화하고 XAML에서 임의로 바인딩하는 방법

  16. 16

    Ninject에서 기존 바인딩의 범위를 변경하는 방법

  17. 17

    WPF : OpenFileDialog의 결과를 이미 바인딩 된 TextBox.Text에 바인딩하는 방법

  18. 18

    QML에서 임의의 양의 요소를 만드는 방법

  19. 19

    QML에서 임의의 양의 요소를 만드는 방법

  20. 20

    wpf에서 바인딩하는 방법

  21. 21

    Spacy에서 임의의 언어를로드하는 방법

  22. 22

    Mvvm Light에서 TextBox의 값을 뷰 모델에 바인딩하는 방법

  23. 23

    자식 viewmodel에서 부모 viewmodel의 이벤트에 바인딩하는 방법

  24. 24

    PowerApps의 드롭 다운에 데이터 원본을 바인딩하는 방법

  25. 25

    JavaScript for-loop 내에서 위임 된 이벤트를 바인딩하는 방법

  26. 26

    kentico 문서 유형의 데이터를 드롭 다운에 바인딩하는 방법은 무엇입니까?

  27. 27

    xceed 데이터 그리드에서 콤보 박스의 Itemssource를 바인딩하는 방법

  28. 28

    자바 스크립트에서 바인딩 된 함수의 'this'매개 변수를 재정의하는 방법

  29. 29

    함수의 "this"를 클래스에 바인딩하는 방법 (React Component)

뜨겁다태그

보관