获取WCF请求的域名?

问题描述:

如何获取请求者的域名或完整URL?获取WCF请求的域名?

+0

您的意思是用于访问服务的URL?客户的身份? – 2009-06-02 18:07:50

+0

没有客户的引用域。 – DDiVita 2009-06-05 11:19:32

我不知道,我明白你的问题,但如果你需要的Windows用户进行调用服务操作的域名,使用此:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name 

这将返回“{域}\{用户名}”。

试试这个,让我知道你在想什么(你可能会想这段代码粘贴到一个MSTEST项目):

[TestClass] 
public class AlternativeCredentials 
{ 
    // Contracts 
    [ServiceContract] 
    interface IMyContract 
    { 
     [OperationContract] 
     string GetUserName(); 
    } 

    // Service 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    class MyService : IMyContract 
    { 
     public string GetUserName() 
     { 
      return OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name; 
     } 
    } 

    // Client 
    class MyContractClient : ClientBase<IMyContract>, IMyContract 
    { 
     public MyContractClient() { } 
     public MyContractClient(Binding binding, string address) : 
      base(binding, new EndpointAddress(address)) { } 

     public string GetUserName() 
     { return Channel.GetUserName(); } 
    } 

    #region Host 
    static string address = "net.tcp://localhost:8001/" + Guid.NewGuid().ToString(); 
    static ServiceHost host; 

    [ClassInitialize()] 
    public static void MyClassInitialize(TestContext testContext) 
    { 
     host = new ServiceHost(typeof(MyService)); 
     host.AddServiceEndpoint(typeof(IMyContract), new NetTcpBinding(), address); 
     host.Open(); 
    } 

    [ClassCleanup()] 
    public static void MyClassCleanup() 
    { 
     if (host.State == CommunicationState.Opened) 
      host.Close(); 
    } 
    #endregion 

    [TestMethod] 
    public void UseUserNameCredentials() 
    { 
     using (MyContractClient proxy = 
      new MyContractClient(new NetTcpBinding(), address)) 
     { 
      proxy.ClientCredentials.UserName.UserName = "MyUsername"; 
      proxy.ClientCredentials.UserName.Password = "MyPassword"; 

      proxy.Open(); 
      Assert.AreEqual("EMS\\magood", proxy.GetUserName()); 
      proxy.Close(); 
     } 
    } 
}