C# web服务-400错误请求

C# web服务-400错误请求,c#,php,web-services,C#,Php,Web Services,我想使用一个来自C#的php web服务,它受htaccess保护。 我通过在VS2010中添加一个web引用添加了该服务 mywsfromwsdl myws = new mywsfromwsdl(); System.Net.CredentialCache myCredentials = new System.Net.CredentialCache(); NetworkCredential netCred = new NetworkCredential("user", "pass"); myC

我想使用一个来自C#的php web服务,它受htaccess保护。 我通过在VS2010中添加一个web引用添加了该服务

mywsfromwsdl myws = new mywsfromwsdl();

System.Net.CredentialCache myCredentials = new System.Net.CredentialCache();
NetworkCredential netCred = new NetworkCredential("user", "pass");
myCredentials.Add(new Uri(myws.Url), "Basic", netCred);
myws.Credentials = myCredentials;
myws.PreAuthenticate = true;

tbxIN.Text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> "+
            " <test> "+
            " <parm1>4</parm1>  "+
            " <parm1>2</parm1>  "+
            "  </test>";

tbxOUT.Text= myws.func1(tbxIN.Text.ToString());
mywsfromwsdl myws=newmywsfromwsdl();
System.Net.CredentialCache myCredentials=新系统.Net.CredentialCache();
NetworkCredential netCred=新的NetworkCredential(“用户”、“通过”);
添加(新Uri(myws.Url),“Basic”,netCred);
myws.Credentials=myCredentials;
myws.PreAuthenticate=true;
tbxIN.Text=“”+
"  "+
" 4  "+
" 2  "+
"  ";
tbxOUT.Text=myws.func1(tbxIN.Text.ToString());
VS显示了一个名为“400错误请求我的最后一行”的错误。 如果删除服务器上的.htaccess文件,pgm工作正常,但无法删除。因为其他PHP用户使用该服务

有人能告诉我如何正确发送凭证吗


根据MSDN,您不需要凭证缓存:

 // Set the client-side credentials using the Credentials property.
 ICredentials credentials = new NetworkCredential("Joe",SecurelyStoredPassword,"mydomain");
 math.Credentials = credentials;
您是否尝试过此方法而不是缓存对象?可以找到更多信息。

有时C#和Apache会发生一些冲突:在这种情况下,可能是由于身份验证处于活动状态,您的客户端希望得到
100 Continue
响应,但服务器不发送响应

此类行为通过以下行进行切换:

ServicePointManager.Expect100Continue = false;
在执行请求之前添加它


还值得指出的是,当
400坏请求
发生时,您可能会在服务器日志中找到一些有用的详细信息。

作为替代,您可以a)编辑.htaccess文件以跳过特定的php“webservice”文件,因此htaccess将与除webservice b之外的所有文件一起工作)将webservices移动到子文件夹,然后在此子文件夹中添加一个.htaccess以重置限制。否,如果我尝试此操作,则会出现异常:HTTP状态400:错误请求如果我尝试此操作,则会出现另一个错误:HTTP状态401:需要授权。