WCF服务,如何从类库中获取网站URL?

JL.*_*JL. 9 .net c# wcf

我有一个在IIS中运行的WCF服务,它调用httpContext可用的类库中的函数.如何动态获取网站网址,这也可能是虚拟目录?

Aja*_*axx 25

我将首先假设您正在使用HTTP - 我确信您可以根据具体情况决定调整方法.我试图使用HttpContext得到一个答案,并发现在Cassini下运行时该值为null所以我尝试了另一种方法.

System.ServiceModel.OperationContext包含正确的请求上下文.您可以按照请求关注实际请求消息并清除标头.

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
Run Code Online (Sandbox Code Playgroud)


Rus*_*ell 4

您可以创建一个 ServiceHostFactory 来手动启动服务主机,然后将端点地址存储在静态类中以供应用程序使用。这是一个简单的例子:

(在你的 myService.svc 中):

<%
 @ServiceHost
 Service="MyNamespace.MyService" 
 Factory="MyNamespace.MyServiceHostFactory"
  %>
Run Code Online (Sandbox Code Playgroud)

(在您的 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;
    }
Run Code Online (Sandbox Code Playgroud)

(在您的 MyGlobalStaticClass.cs 中):

  public static string Address = "";
Run Code Online (Sandbox Code Playgroud)