서비스가 클라이언트로부터받는 메시지의 크기를 검사하기 위해 MessageSizeInspector
클래스를 작성했습니다. 여기가 모습입니다 :대역폭을 절약하기 위해 WCF 비누 메시지 크기를 줄이는 방법은 무엇입니까?
//the actual implementation logs more!
//but in this question, my only concerns is request.ToString()
public sealed class MessageSizeInspector :
BehaviorExtensionElement, //to enable it to be used in config
IDispatchMessageInspector, //service-side inspector
IEndpointBehavior //so we can apply it on endpoint
{
if (request != null)
{
Logger.Verbose("Message = {0}\n", request.ToString()));
}
//more
}
그리고이 형식의 메시지 로그 : 당신이 실제 메시지가 작은입니다 볼 수 있지만 수 있듯이
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:8961/EngineService</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IEngineService/GetMousePatternID</Action>
</s:Header>
<s:Body>
<GetMousePatternID xmlns="http://tempuri.org/">
<args>
<accelerator xmlns="http://schemas.datacontract.org/2004/07/Runaware.Insight.EngineService" />
<accessKey xmlns="http://schemas.datacontract.org/2004/07/Runaware.Insight.EngineService" />
<controlId xmlns="http://schemas.datacontract.org/2004/07/Runaware.Insight.EngineService">66222</controlId>
<!--- deleted the rest to avoid verbosity -->
</args>
</GetMousePatternID>
</s:Body>
</s:Envelope>
XML 요소와 네임 스페이스가 을을 너무 거대한. 특히 네임 스페이스는 실제 메시지와 비교하여 너무 크다.
내 질문은 : 비누 메시지의 크기를 어떻게 줄일 수 있습니까? xmlns
이 모든 요소에 대해 동일하므로 WCF는이를 최적화 할 수 있지만 그렇지 않습니다. 우리가 선택한 네임 스페이스를 더 짧게 사용할 수있게 할 수 있습니까? accelerator
과 accessKey
과 같은 몇 가지 요소는 아무 값도 없습니다 (오른쪽으로 스크롤하여 볼 수 있듯이).하지만 여전히 있습니다! WCF를 생략하고 서비스 측면에서 null
(또는 기본값)으로 가정 할 수 있습니까?
요약하면 대역폭을 절약하기 위해 할 수있는 일은 무엇입니까?
나는 위의 메시지가 동일한 XML 요소와 네임 스페이스를 사용하여 정확히 같은 형식의 클라이언트라고 가정합니다.
서버는 C# 및 WCF로 작성되었으며 클라이언트는 Windows Web Services API을 사용하여 C++로 작성되었습니다. 서비스와 클라이언트는 모두 저에게 썼습니다. 그래서 나는 그들에 대한 완전한 통제권을 가졌습니다. 필요한 경우 대역폭을 절약하기 위해 변경할 수 있습니다!
WCF 서비스에 대한 제어 권한은 얼마나 있습니까? 대신에 "WebAPI"로 변경할 수있는 기회가 있습니까? –
@Dommer : 전적으로 제어 할 수 있습니다. 서비스와 클라이언트 모두 나에 의해 작성되었습니다. – Nawaz