ServiceHost와 함께 사용하기 위해 필요한 모든 항목 (인코더, 바인딩 등)이 포함 된 자체 WCF 채널을 구축했습니다.WCF의 addressfilter 문제
단지 "서비스 모델"에서 우스갯 거리가없는 "채널 스택"을 만들고 싶습니다. 이것을 실현하기 위해, 인코더는 다른 채널과 마찬가지로 XML 인포 세트가있는 완벽한 ServiceModel.Messages를 반환합니다.
[ServiceContract(Namespace = "http://MyNS")]
public interface IService1
{
[OperationContract(IsOneWay = true)]
void dummy();
}
public class Service1 : IService1
{
public void dummy()
{
Console.WriteLine("In Service1:dummy()");
}
}
내가 다른 바인딩을 통해이 서비스를 사용하는 다음과 같은 ServiceModel.Message 내용을 (SOAP 형식) 추적 : 단지 디버깅 (다음
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://MyNS/IService1/dummy</a:Action>
<a:To s:mustUnderstand="1">amqp://localhost</a:To>
</s:Header>
<s:Body>
<dummy xmlns="http://MyNS"></dummy>
</s:Body>
</s:Envelope>
을
는 다음과 같은 서비스 구현을 가정 할 수 있습니다) 필자는 인코더를 allways로 변경하여이 메시지를 반환합니다. 내 맞춤 채널을 사용할 때 :
"수신자가 EndpointDispatcher에서 AddressFilter가 일치하지 않아 수신자가 처리 할 수없는 메시지입니다. 발신자와 수신자의 EndpointAddress가 일치하는지 확인하십시오. "
기본적으로 EndPointDispatcher.AddressFilter는 "TO"헤더를보고 해당 서비스에 메시지를 전달한다는 점을 읽었습니다. 다른 바인딩에서도 이러한 현상이 발생합니다. 내 맞춤 채널에서도 이러한 현상이 발생하지 않습니까?
기본 AddressFilter가 수행중인 작업을 확인할 방법이 있습니까? 이 문제는 내가 메시지를 생성 한 방법이다
감사