我想从 .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 auth 保护)
- 在 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();
}
(请参阅上面的评论。这些是我尝试过的调用。我错过了指定凭据的方法吗?)
谢谢大家,汤姆