Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET2.0Web服务中调用PHP脚本_C#_Php_.net_Web Services_Soap - Fatal编程技术网

C# 在.NET2.0Web服务中调用PHP脚本

C# 在.NET2.0Web服务中调用PHP脚本,c#,php,.net,web-services,soap,C#,Php,.net,Web Services,Soap,我想从.NET 2.0 SOAP web服务(用C#编写)中发出HTTP web请求。我无法将调用实现为[WebMethod],因为这是一个已经存在的PHP脚本,应该在web服务中重新使用 SOAP web服务在IIS上运行,虚拟目录受NTLM身份验证的保护。web服务运行良好。 我在web.config中有以下行: <authentication mode="Windows" /> (请看上面的评论。这些是我尝试过的调用。我是否错过了指定凭据的方法?) 谢谢各位, Tom我想服务

我想从.NET 2.0 SOAP web服务(用C#编写)中发出HTTP web请求。我无法将调用实现为
[WebMethod]
,因为这是一个已经存在的PHP脚本,应该在web服务中重新使用

SOAP web服务在IIS上运行,虚拟目录受NTLM身份验证的保护。web服务运行良好。 我在web.config中有以下行:

<authentication mode="Windows" />
(请看上面的评论。这些是我尝试过的调用。我是否错过了指定凭据的方法?)

谢谢各位,
Tom

我想服务器正在请求基本身份验证。试试这个:

System.Net.CredentialCache credentialCache = new System.Net.CredentialCache(); 
credentialCache.Add(
    new System.Uri("http://www.yoururl.com/"),
    "Basic", 
    new System.Net.NetworkCredential("username", "password")
);
正如您所看到的,它与您的代码非常相似:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://server/directory/convtext.php?string=" + raw);
    request.Credentials = new NetworkCredential(user, pass, domain);
两者都有效

如果您想避开该行,则必须禁用基本 php web服务器上的身份验证。没有别的办法。你必须使用 已启用身份验证以向服务器显示您是有效用户, 或者把它公开


现在我终于找到了解决问题的办法。 从.NETWeb服务调用php脚本现在工作正常。 我不使用身份验证(我使用匿名访问)。它以前不起作用的原因不是身份验证设置中的错误设置(它们已正确设置为允许匿名访问),而是授权设置中的错误设置。因此,不是身份验证失败,而是授权失败。 换句话说,匿名用户被授予访问服务器的权限,但不允许在服务器上执行任何操作。
我在授权小程序中添加了一个允许规则,现在它可以工作了

我已经尝试将脚本放入禁用身份验证的目录中。我仍然收到错误401。作为另一种选择,我将重复使用用于调用web服务的相同凭据。我绝对不想在代码中硬编码用户名和密码。你在使用apache吗?。使用apache安装附带的htpasswd.exe程序来创建.htpasswd_私有文件。如果您将PHP与IIS一起使用,只需在使用IIS的应用程序上禁用基本身份验证。PHP脚本与.NETWeb服务位于同一个web服务器上(服务器上安装了ASP和PHP)。我关闭了除PHP脚本所在目录的匿名身份验证之外的所有身份验证方法,但是401错误仍然发生。(顺便说一句,在SOAP web服务上,我使用的是Windows身份验证,我想重复使用用于对PHP脚本进行web服务身份验证的相同凭据。第二个最佳选择是匿名访问PHP scipt,但两者都不起作用。)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://server/directory/convtext.php?string=" + raw);
    request.Credentials = new NetworkCredential(user, pass, domain);