باستخدام IDispatchMessageInspector للحصول على عنوان بعيد للطلب

I'm trying to follow this blog post: http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

هدفي هو الحصول على عنوان بعيد عن الطلب الوارد بطريقة أو بأخرى ، ولكن لسبب ما ، إما أن يكون العنوان في أي مكان من المعلمات ، أو لا شيء.

إليك الواجهة التي أقوم بتنفيذها:

public interface IDispatchMessageInspector
{
    object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext);
    void BeforeSendReply(ref Message reply, object correlationState);
}

الطريقة التي أحاول بها الحصول على العنوان البعيد هي AfterReceiveRequest . لقد فحصت كل من المعلمتين request و channel . يبدو أيضًا أن channel.RemoteAddress هو المكان الذي يجب أن يكون فيه ، ولكن هذه الخاصية فارغة لسبب ما. المعلمة هي أيضًا خالية ، لكنني أعتقد ذلك لأنني أقوم بـ GET وليس POST.

يوجد أدناه توقيع الطريقة التي أستند إليها لاختبار ذلك.

[OperationContract, WebGet( UriTemplate = "{*path}", ResponseFormat = WebMessageFormat.Json)]
string[] GetList(string path);
2

3 إجابة

5
وأضاف
اقتراحك الثاني يعمل بشكل جيد. شكرا لكم.
وأضاف المؤلف rafale, مصدر
هذا ليس خيط آمن. انظر اقتراحي.
وأضاف المؤلف paulius_l, مصدر

ستكون المعلومات في رؤوس الطلبات ، التي يتم العثور عليها باستخدام:

WebHeaderCollection headers = WebOperationContext.Current.IncomingRequest.Headers;
0
وأضاف
لقد جربت ذلك أيضًا في مرحلة ما ، لكن الرؤوس لم يكن لديها ما كنت أبحث عنه. يبدو أن حل يحيى يعمل بشكل جيد.
وأضاف المؤلف rafale, مصدر

استخدم هذا من تنفيذ IDispatchMessageInspector :

var remoteEndpoint = request.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
var ipAddress = remoteEndpoint.Address;
0
وأضاف