【发布时间】:2013-04-30 08:33:44
【问题描述】:
我想从 .NET 2.0 SOAP Web 服务(用 C# 编写)中发出 HTTP Web 请求。我无法将调用实现为 [WebMethod],因为这是一个已经存在的 PHP 脚本,应该在 Web 服务中重复使用。
SOAP Web 服务在 IIS 上运行,虚拟目录受 NTLM 身份验证保护。 Web 服务运行良好。 我在 web.config 中有以下行:
<authentication mode="Windows" />
在 Web 方法中,我想调用一个名为 convertString 的函数。这调用了一个转换字符串的 PHP 脚本。我尝试了 PHP 脚本的不同位置:
- 在其原始目录中(受 NTLM 身份验证保护)
- 在 Web 服务虚拟目录中
- 在具有匿名访问权限的目录中
在所有三种情况下,我都会收到 HTTP 错误 401 - 未经授权。 它仅在明确指定用户名、密码和域时才有效。但我真的很想避免这种情况。 有谁知道,为什么会这样?
函数代码如下:
public string convertString(string raw)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://server/directory/convtext.php?string=" + raw);
request.Credentials = new NetworkCredential(user, pass, domain); // This works! But I would like to avoid this line...
// request.UseDefaultCredentials = true; // This does not work
// request.Credentials = CredentialCache.DefaultCredentials; // This does not work
// request.Credentials = CredentialCache.DefaultNetworkCredentials; // This does not work
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader input = new StreamReader(response.GetResponseStream());
return input.ReadToEnd();
}
(请参阅上面的 cmets。这些是我尝试过的调用。我错过了指定凭据的方法吗?)
谢谢各位, 汤姆
【问题讨论】:
标签: c# php .net web-services soap