远程服务通过代理呼叫

时间:2014-06-03 06:54:51

标签: wcf service proxy credentials

我正在尝试从VS2012进行非常简单的服务调用。 该服务位于代理外部的域上,需要登录凭据。

我已经为visuals studio中的服务设置了一个参考。此时我输入了远程domian用户名和密码,VS为我创建了所有代理类。

然后我将此行添加到appconf文件中。

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    </defaultProxy>
</system.net>

我认为这将允许我使用我自己的凭证

来完成我们的代理

然后我冤枉了这段简单的代码

    private void GetData()
    {
        OASIS.OasisServiceSoapClient o = new OASIS.OasisServiceSoapClient();

        o.ClientCredentials.UserName.UserName = @"OtherDimain\UserName";
        o.ClientCredentials.UserName.Password = "Password";
        var d = o.SelectOfficersAll();

    }

当然它没有用,我得到了每个人都发布的所有错误。

所以第一个问题是 我需要添加此

o.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;

因为我做了并且仍然得到同样的愚蠢错误 “HTTP请求未经授权使用客户端身份验证方案'匿名'。从服务器收到的身份验证标头是'Negotiate,NTLM'。”

和内部异常

“{”远程服务器返回错误:(401)未经授权。“}”

所以我通过代理? 我使用自己的凭据吗? 我是否将正确的参数传递给服务模型?

一些示例显示上面代码中的用户名和密码属性是模拟当前作业。 但我在MSDN页面上读到这些是您要在远程服务上使用的凭据。帮助主题是暧昧的。如果我不在这里输入,那么如何?

我正在尝试做一些如此简单的事情,但似乎无法超越这一点。

1 个答案:

答案 0 :(得分:0)

好的,谢谢我的同事肖恩。似乎取决于您是否正在调用Web服务或WCF服务确定您需要执行的操作。

因此,作为一项有效的网络服务

OASISWeb.OasisService s = new OASISWeb.OasisService();
s.Credentials =  new System.Net.NetworkCredential("Username", "Password", "Domain");
var d = s.SelectOfficersAll();
DataSet x = (DataSet)d;

如果它是WCF服务,那么你需要这个

var service = new OasisTest2.ServiceReference1.OasisServiceSoapClient();
System.Net.WebRequest.DefaultWebProxy.Credentials =  system.Net.CredentialCache.DefaultNetworkCredentials;
service.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("Username", "Password", "Domain");
var result = service.SelectOfficersAll();

似乎WebRequest是一个全局对象,您需要在其上设置DefaultWebProxy.Credentails。

你怎么知道这个?当我搜索如何连接到MSDN上的WCF服务时,我从未找到任何对它的引用。必须是个秘密。所以请把它放在你的帽子下面。