Tôi có một dịch vụ WCF đang chạy trong IIS gọi một hàm trong thư viện lớp nơi có httpContext. Làm thế nào tôi có thể tự động nhận được url của trang web, đây cũng có thể là một thư mục ảo?Dịch vụ WCF, cách lấy URL của trang web từ trong thư viện lớp học?
Trả lời
Bạn có thể tạo ServiceHostFactory để khởi chạy máy chủ dịch vụ theo cách thủ công, sau đó lưu trữ địa chỉ điểm cuối trong một lớp tĩnh để ứng dụng của bạn sử dụng. Dưới đây là một ví dụ đơn giản:
(trong myService.svc của bạn):
<%
@ServiceHost
Service="MyNamespace.MyService"
Factory="MyNamespace.MyServiceHostFactory"
%>
(trong MyServiceHostFactory.cs của bạn):
/// <summary>
/// Extends ServiceHostFactory to allow ServiceHostFactory to be used.
/// </summary>
public class MyServiceHostFactory : ServiceHostFactory
{
/// <summary>
/// Creates a new ServiceHost using the specified service and base addresses.
/// </summary>
/// <param name="serviceType"></param>
/// <param name="baseAddresses"></param>
/// <returns></returns>
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host;
host = new ServiceHost(serviceType, baseAddresses);
MyGlobalStaticClass.Address = baseAddresses[0]; // assuming you want the first endpoint address.
return host;
}
(Trong MyGlobalStaticClass.cs của bạn):
public static string Address = "";
Tôi không quá nóng trên WCF vì tôi quen với .Net 2.0, nhưng điều này có làm được không?
HttpContext.Current.Request.Url.ToString()
Điều đó sẽ cung cấp cho bạn url của yêu cầu gọi. Việc nắm bắt ở đây là bạn có thể có thể có nhiều tên miền hoặc thư mục ảo trỏ đến cùng một dịch vụ và nó sẽ chỉ cung cấp cho bạn url mà khách hàng đã chỉ định. Tuy nhiên, nếu bạn có nhiều điểm vào, thì không có url "một" nào.
Điều này cũng giả định ràng buộc WCF là basicHttpBinding hoặc HTTP ràng buộc các loại (ví dụ: netTcpBinding không có HttpContext). – Russell
Tôi sẽ bắt đầu bằng cách giả sử rằng bạn đang sử dụng HTTP - Tôi chắc chắn bạn có thể điều chỉnh cách tiếp cận tùy thuộc về điều kiện cụ thể của bạn ra lệnh. Tôi đã cố gắng để có được một câu trả lời bằng cách sử dụng HttpContext là tốt và phát hiện ra rằng giá trị là null khi chạy theo Cassini vì vậy tôi đã thử một cách tiếp cận thay thế.
System.ServiceModel.OperationContext chứa ngữ cảnh yêu cầu phù hợp. Bạn có thể làm theo yêu cầu xuống thông báo yêu cầu thực tế và chà tiêu đề.
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
Hiện tại tôi đang làm việc trên WCF REST Service và tôi có cùng loại yêu cầu. Tôi cần URL máy chủ dịch vụ theo một trong các phương pháp của tôi. Dưới đây là các cách khác nhau để lấy WCF REST Service Host/URL trong thư viện lớp.
Bạn có thể sử dụng WebOperationContext
lớp có sẵn trong không gian tên System.ServiceModel.Web
để nhận url dịch vụ. Xin lưu ý rằng lớp học này chỉ dành cho WCF REST Service.
WebOperationContext.Current.IncomingRequest.Headers["host"]
- Cung cấp dịch vụ Host NameWebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.Host
- Cung cấp dịch vụ Host NameWebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri
- Cung cấp dịch vụ đầy đủ UrlWebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.AbsoluteUri
- Cung cấp dịch vụ đầy đủ Url
Bạn có thể tìm thêm thông tin về WebOperationContext
lớp học trên MSDN
Đối với tôi, UriTemplateMatch luôn là null, vì vậy tôi không thể sử dụng 3/4 đề xuất này. –
- 1. Thư viện dịch vụ WCF và loại dự án thư viện lớp học
- 2. Vấn đề Calling Thư viện dịch vụ WCF từ jQuery
- 3. Mục đích của Thư viện Dịch vụ WCF là gì?
- 4. Cách lấy XML thô trong WCF Client từ dịch vụ Web gọi
- 5. Thử nghiệm dịch vụ web WCF?
- 6. Sử dụng dịch vụ REST từ WCF
- 7. Dịch vụ web wcf json
- 8. InvalidOperationException trong khi tạo cá thể dịch vụ web wcf
- 9. Đánh dấu một lớp thư viện tham chiếu trong dịch vụ WCF
- 10. Dịch vụ WCF có phải là dịch vụ web không?
- 11. Dịch vụ WCF thay vì Dịch vụ Web ASMX?
- 12. Sự khác nhau giữa Ứng dụng Dịch vụ WCF và Thư viện Dịch vụ WCF là gì?
- 13. URL WSDL cho Dịch vụ WCF (basicHttpBinding) được lưu trữ bên trong Dịch vụ Windows
- 14. Làm cách nào để biên dịch Thư viện Dịch vụ WCF ở chế độ 32 bit?
- 15. Thư viện lớp với tài liệu tham khảo dịch vụ
- 16. Làm thế nào để lưu trữ dịch vụ WCF của tôi trong trang web của tôi?
- 17. Cách tạo tệp wsdl của dự án thư viện dịch vụ wcf?
- 18. Cách lấy URL cơ sở của trang web bên ngoài
- 19. Thư viện thống nhất và WCF: Nơi tải tính thống nhất trong thư viện wcf?
- 20. ASP - Cách lấy URL của trang web giới thiệu
- 21. tiêu thụ dịch vụ web WCF từ ứng dụng Android?
- 22. Thư viện lớp học di động để chia sẻ [DataContract] lớp
- 23. url tương đối trong liên kết dịch vụ wcf
- 24. Máy chủ truyền thống C# với Dịch vụ web WCF
- 25. Dịch vụ web chậm (và dịch vụ WCF) gọi từ Windows 7
- 26. Cách lấy thư mục hiện tại trên thư viện lớp học?
- 27. Dịch vụ web SAP từ .NET qua WCF
- 28. gửi dữ liệu đến một trang web từ một dịch vụ WCF
- 29. Cách tốt nhất để xây dựng thư viện dịch vụ WCF có thể cắm nóng
- 30. Kiểm tra dịch vụ web WCF
Url cho dịch vụ WCF hoặc url cho trang web là nguồn của HttpContext? – Russell
URL cho trang web lưu trữ dịch vụ WCF ...ví dụ: http: // localhost/virtualDirectory từ http: //localhost/virtualDirectory/myService.svc –
Phiên bản IIS nào? IIS 6 hoặc 7 hoặc 7.5? WS có được triển khai không? –