使用C#对PHP Web服务进行身份验证

时间:2012-08-02 19:53:43

标签: c# .net web-services authentication soap

以下是适用于PHP Webservice客户端的示例代码:

 $options = array();
 $options['trace'] = 1;   
 $options['login'] = 'username';
 $options['password'] = 'password';    
 $client = new SoapClient("http://wsurl.com/pt/wsdl", $options);

我想使用c#访问此Web服务,但很难进行身份验证。我是否需要显式设置soap标头,或者有一种内置的方式来在.NET中发送凭据

2 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点,因为服务器处理身份验证的方式不同首先你可以使用这样的东西:

var req = WebRequest.Create(<your url>);
NetworkCredential creds = new NetworkCredential(<username>, <password>);
req.Credentials = creds;

var rep = req.GetResponse();

但是,如果您需要实际的Authroization标头,则需要使用this code

public void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)
{
 string authInfo = userName + ":" + userPassword;
 authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
 req.Headers["Authorization"] = "Basic " + authInfo;
}

然后您的请求代码变为

var req = WebRequest.Create(<your url>);
SetBasicAuthHeader(req, username, password);
rep = req.GetResponse();

如果您有任何疑问,请与我们联系。

答案 1 :(得分:0)

如果您在C#项目中添加服务引用,则可以像这样调用您的服务:

var proxy = new YourServiceClient();
proxy.ClientCredentials.UserName.UserName = "username";
proxy.ClientCredentials.UserName.Password = "password";

可在此处找到更多信息:http://msdn.microsoft.com/en-us/library/ms733775.aspx