我有一个在IIS中运行的WCF服务,该服务在可用的httpContext类库中调用一个函数。我如何动态获取网站的网址,这可能也是一个虚拟目录?WCF服务,如何从类库中获取网站的URL?
回答
您可以创建一个ServiceHostFactory,手动启动您的服务主机,然后将端点地址存储在您的应用程序要使用的静态类中。下面是一个简单的例子:
(在你的myService.svc):
<%
@ServiceHost
Service="MyNamespace.MyService"
Factory="MyNamespace.MyServiceHostFactory"
%>
(在你的MyServiceHostFactory.cs):
/// <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;
}
(在你MyGlobalStaticClass.cs):
public static string Address = "";
我对WCF不太热,因为我更习惯.Net 2.0,但会这样做吗?
HttpContext.Current.Request.Url.ToString()
这应该给你的调用请求的网址。这里的问题是,你可能有多个域或虚拟目录指向同一个服务,它只会给你客户端指定的url。但是,如果您有多个入口点,则无论如何都没有“一个”网址。
这也假设WCF绑定是basicHttpBinding或HTTP绑定的排序(例如netTcpBinding没有HttpContext)。 – Russell 2009-12-01 02:12:30
我将首先假定您使用的是HTTP--我确定您可以调整方法根据你的具体情况决定。我也尝试使用HttpContext获得答案,并发现在Cassini下运行时该值为null,所以我尝试了另一种方法。
System.ServiceModel.OperationContext包含正确的请求上下文。您可以将请求转到实际请求消息并清理标题。
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
目前我正在使用WCF REST服务和我有同样的要求。我需要在我的一个方法中使用服务主机URL。下面是在类库中获取WCF REST服务主机/ URL的不同方式。
您可以使用WebOperationContext
类,其中System.ServiceModel.Web
命名空间中的类可用于获取服务url。请注意,此类仅适用于WCF REST服务。
WebOperationContext.Current.IncomingRequest.Headers["host"]
- 提供服务的主机名称WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.Host
- 提供服务的主机名称WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri
- 提供服务的完整URLWebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.AbsoluteUri
- 提供服务的完整URL
您可以从MSDN获取有关WebOperationContext
的更多信息
对我来说,UriTemplateMatch始终为空,所以我不能使用3/4的这些建议。 – 2014-06-27 22:36:32
- 1. 如何通过WCF服务网站获取XML响应?
- 2. 如何使用javascript在服务器上获取网站的URL
- 3. 如何从WCF服务获取客户端的URL?
- 4. Wcf服务的网站
- 5. 如何从网站获得服务
- 6. 如何从C#中的URL读取WCF服务的WSDL
- 7. 创建WCF服务网站
- 8. 部署wcf服务网站
- 9. 如何从Sharepoint服务器获取网站集对象
- 10. WCF REST服务的WCF服务应用程序(项目)或WCF服务(网站)
- 11. 如何获取从服务器获取数据的url/xmlhttprequest?
- 12. 如何获取asp.net中的服务器/网站IP地址?
- 13. 获取网站的服务器
- 14. 如何从WCF方法中的服务获取Content-Length?
- 15. 从WCF服务调用WCF服务时获取异常
- 16. 从Web服务呼叫的起始地址获取网站的URL
- 17. 如何从IIS ISAPI的GetExtensionVersion获取我的网站的URL?
- 18. ASP.NET网站 - > WCF服务 - > WCF服务,一路模仿?
- 19. 如何从WCF服务中获取逐段数据
- 20. 获取tcp端口网站服务于
- 21. 如何从java中的服务器证书获取OCSP url?
- 22. Silverlight类库中的WCF服务参考
- 23. Android从WCF Rest服务获取图片
- 24. 从WCF服务获取字符串
- 25. 从WCF服务获取实体
- 26. 获取调用类库的Web服务的URL
- 27. 获取一个C#类库来拥有WCF服务?
- 28. 如何从PHP调用网站服务?
- 29. 如何从网站提供OAuth服务?
- 30. 如何直接从Silverlight的WCF RIA域服务获取对象
WCF服务的URL或作为HttpContext源的网站的URL? – Russell 2009-11-30 22:33:16
托管WCF服务的网站的URL ...例如:http:// localhost/virtualDirectory from http://localhost/virtualDirectory/myService.svc – 2009-11-30 22:36:52
哪个版本的IIS? IIS 6或7或7.5? WAS是否实施? – 2010-07-16 18:52:38