سؤال

لدي بعض راحة الخدمات التي تعمل في محض WCF السياق (أيASP.NET التوافق غير ممكن ، وبالتالي لا يوجد HttpContext.Current كائن المتاحة).

عناوين url إلى خدمات إعادة كتابة في بداية الطلب باستخدام IHttpModule (وهو في هذه المرحلة لا يكون لها HttpContext و يعيد كتابة باستخدام HttpContext.Current.RewritePath) للتخلص من الأشياء مثل .svc تمديد من URL.

ومع ذلك ، لا تحتاج إلى الوصول إلى URL الأصلي التي طلبت من داخل WCF البنية التحتية.هل هناك ما يعادل HttpContext.Current.Request.RawUrl على OperationContext أو WebOperationContext دروس في أي مكان ؟ باستخدام WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri إرجاع إعادة كتابة URL ليست أصلية واحدة.

هل كانت مفيدة؟

المحلول

ويمكنك الحصول على نقطة النهاية استهدف حاليا وأوري لذلك عن طريق القيام:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

والتي أعتقد أن الشيء نفسه على النحو التالي:

OperationContext.Current.IncomingMessageHeaders.To

وهذا هو كائن System.Uri، وأعتقد أنك يمكن أن مجرد الحصول على OriginalString أو PathAndQuery، أو أيا كان الأجزاء التي تريد من ذلك.

نصائح أخرى

ومحاولة شيء من هذا القبيل:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri

لقد وجدت أن استخدام

OperationContext.Current.RequestContext.RequestMessage.Headers.To

يعمل معظم من مرة, ولكن لم يكن طلبي.فمن وراء NLB (شبكة موازن التحميل) الذي يؤدي إلى فقدان الأصلي إدخال اسم المضيف. ولكن المدخلات المضيف لا يزال في رأس يدعى "المضيف" ، التي كان من المستغرب من الصعب الحصول على.ويقع في:

System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]

(رأس الكائنات في النظام.ServiceModel.OperationContext.الحالي.IncomingMessageHeaders لا يكون حقا كل رؤوس من العميل)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top