获取一个WCF请求的域名? [英] Get the domain name of a WCF request?

查看:161
本文介绍了获取一个WCF请求的域名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样才能获得域名或请求的完整网址?

How can I obtain the domain name or full URL of the requester?

推荐答案

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

I'm not sure that I understand your question, but if you need the domain name of the Windows user making the call to a service operation, use this:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name

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

This will return "{domain}\{username}".

试试这个,让我知道你在想什么(你可能会想复制粘贴此code到MSTest的项目):

Try this and let me know what you think (you'll probably want to paste this code into an mstest project):

[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();
        }
    }
}

这篇关于获取一个WCF请求的域名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆